
io.github.benas.randombeans.RandomizerProxy Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of random-beans Show documentation
Show all versions of random-beans Show documentation
Random Beans core implementation
package io.github.benas.randombeans;
import io.github.benas.randombeans.api.Randomizer;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.function.Supplier;
/**
* Dynamic proxy that adapts a {@link java.util.function.Supplier} to a {@link Randomizer}.
*
* @author Mahmoud Ben Hassine ([email protected])
*/
class RandomizerProxy implements InvocationHandler {
private final Supplier> target;
private RandomizerProxy(final Supplier> target) {
this.target = target;
}
/**
* Create a dynamic proxy that adapts the given {@link Supplier} to a {@link Randomizer}.
* @param supplier to adapt
* @return the proxy randomizer
*/
static Randomizer> asRandomizer(final Supplier> supplier) {
return (Randomizer>) Proxy.newProxyInstance(
Randomizer.class.getClassLoader(),
new Class[]{Randomizer.class},
new RandomizerProxy(supplier));
}
@Override
public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable {
if ("getRandomValue".equals(method.getName())) {
return target.getClass().getMethod("get").invoke(target, args);
}
return null;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy