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