我有一个父类Parent
和两个子类A
和B
。有一个类Wrapper
,它包含一个接口Function
,该接口允许程序员为每个包装器指定特定的方法。
Wrapper
包含变量Class<Parent> inputClass
和Class<Parent> outputClass
,它们指定输入和输出类型。 Wrapper
应该将A映射到A或B,或将B映射到A或B。
当我尝试调用包装构造函数Wrapper(Class<Parent> input, Class<Parent> output, Function func)
时出现问题。 Eclipse为尝试将A.class
或B.class
插入input
或output
而给我一个错误。鉴于A和B是Parent的子类,我认为它们将能够传递给构造函数。我该如何实施?
public class Parent {
protected int value;
public void setValue(int x){ value = x; }
public int getValue(){ return value; }
}
public class A extends Parent{
public A(){ setValue(1); }
public A(B b){ setValue( b.getValue()); }
}
public class B extends Parent{
public B(){ setValue(2); }
public B(A a){ setValue(a.getValue()); }
}
public class Wrapper{
protected Class<? extends Parent> inputClass;
protected Class<? extends Parent> outputClass;
protected interface Function{
public Parent of(Parent input);
}
protected Function function;
public Wrapper(Class<? extends Parent> in, Class<? extends Parent> out, Function func) {
inputClass = in;
outputClass = out;
function = func;
}
public Parent of(Parent input){
try{
Parent output = function.of( inputClass.getConstructor( input.getClass() ).newInstance(input) );
return outputClass.getConstructor( output.getClass() ).newInstance( output );
} catch(Exception e){
e.printStackTrace();
return null;
}
}
}
public class Main {
public static void main(String[] args){
///Error occurs here. Can't take A.class in for Parent.class
Wrapper wrapper = new Wrapper(A.class,B.class, new Function(){
@Override
public Parent of(Parent p) {
return null;
}
});
}
}
答案 0 :(得分:0)
问题并非来自A.class
或B.class
,而是来自接口Function
嵌套在Wrapper
类中。我需要在main的构造函数中编写new Wrapper.Function
。