【发布时间】:2012-09-06 07:26:00
【问题描述】:
假设我有如下接口:
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 和 BinaryFunction?更好的是,我该如何做到这一点,以便传入一个单参数构造函数会产生一个仅实现 UnaryFunction 的 ConstructorWrapper 对象(或其中的子类),而传入一个双参数构造函数会产生一个 ConstructorWrapper 对象仅实现BinaryFunction(即,因此您不会在预期BinaryFunction 的地方传入一元构造函数)?最好尽量少重复?
【问题讨论】:
标签: java generics reflection interface