假设我有如下接口:
public interface UnaryFunction<Ret, Arg> {
public Ret invoke(Arg arg);
}
public interface BinaryFunction<Ret, Arg1, Arg2> {
public Ret invoke(Arg1 arg, Arg2 arg);
}
现在假设我有一个像这样的包装类:
public class ConstructorWrapper<Ret> {
// Wrapper for a java.lang.reflect.Constructor
private final Constructor<Ret> constructor;
// Try blocks in the following elided for brevity
// Trying to implement UnaryFunction<Ret, Arg> with this
public <Arg> Ret invoke(Arg arg) { return constructor.newInstance(arg); }
// Trying to implement BinaryFunction<Ret, Arg1, Arg2> with this
public <Arg1, Arg2> Ret invoke(Arg1 arg1, Arg2 arg2) { return constructor.newInstance(arg1, arg2); }
}
如何更改它以便ConstructorWrapper
声明同时实现UnaryFunction
and BinaryFunction
?更好的是,我如何做到这一点,以便传入一个单参数构造函数会导致一个ConstructorWrapper
只实现的对象(或其中的子类),UnaryFunction
而传入一个双参数构造函数会导致一个ConstructorWrapper
只实现的对象BinaryFunction
(即你不要'不要在BinaryFunction
预期a 的地方传入一元构造函数)?最好尽量少重复?