次のようなインターフェースがあるとします。
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
実装するように宣言されるように、これを変更するにはどうすればよいですか? さらに良いことに、引数が 1 つのコンストラクターを渡すと実装のみのオブジェクト (またはそのサブクラス) が生成され、引数が 2 つのコンストラクターを渡すと実装のみのオブジェクトが生成されるようにするにはどうすればよいでしょうか (つまり、 aが期待される場所で単項コンストラクタを渡さないでください)? できるだけ繰り返しを少なくしたいですか?UnaryFunction
BinaryFunction
ConstructorWrapper
UnaryFunction
ConstructorWrapper
BinaryFunction
BinaryFunction