我有一个父类,Parent
,有两个子类,A
和B
。 A有一个类,Wrapper
,包含一个接口(interface) 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;
}
});
}
}
最佳答案
问题不是来自 A.class
或B.class
,但是从界面Function
嵌套在 Wrapper
内类(class)。我需要写new Wrapper.Function
在 main 的构造函数中。
关于java - 如何使用继承的类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52695136/