All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.benas.randombeans.RandomizerProxy Maven / Gradle / Ivy

There is a newer version: 3.9.0
Show newest version
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