package com.nominanuda.zen.common; import java.util.function.Function; import com.nominanuda.zen.stereotype.Factory; public class FunctionsFactory<T, R> implements Factory<Functions<T, R>> { private final Factory<Function<T, ?>> fncFactory; private final Factory<Function<?, ?>>[] fncFactories; public FunctionsFactory(Factory<Function<T, ?>> fncFactory, Factory<Function<?, ?>>... fncFactories) { this.fncFactory = fncFactory; this.fncFactories = fncFactories; } @Override public Functions<T, R> get() { int l = fncFactories.length; Function<?, ?>[] fncs = new Function[l]; for (int i = 0; i < l; i++) { fncs[i] = fncFactories[i].get(); } return new Functions<T, R>(fncFactory.get(), fncs); } }