B 扩展 A,C 扩展 A
尝试更改:
public void convertA(A a) {
AClass clazz = new AClass();
if (a instanceof B) {
clazz.setX(convertBtoX(a));
} else if (a instanceof C) {
clazz.setY(convertCtoY(a));
}
}
自
public void convertAbis(A a) {
AClass clazz = fill(a); //ERROR NO SUITABLE METHOD FOUND FOR FILL
}
public AClass fill(B b) {
clazz.setX(convertBtoX(b));
}
public AClass fill(C c) {
clazz.setY(convertCtoY(c));
}
导致"找不到合适的填充方法"错误。如何删除"实例"开关?A,B,C是Data Trasfer对象,不应该知道X Y和viceversa,所以我不能简单地将填充方法添加到A,B,C类中。
建议?
fill(a)
不会自动匹配 B 和 C 参数,但会查找fill(A a)
。
要解决您的问题,请尝试以下操作。
首先创建一个在类A
中void fill(AClass c)
的抽象函数。
在类 B
中创建此函数:
public void fill(AClass clazz){
clazz.setX(convertBtoX(this));
}
并对班级做几乎相同的C
.
public void fill(AClass clazz){
clazz.setY(convertCtoY(c));
}
然后按如下所示使用:
void convertABis(A a){
AClass clazz = new AClass();
a.fill(clazz);
}
我认为问题是A
不是B
或C
的子类,而是B
和C
是A
的子类。因此,将类型 A
的对象传递给方法 fill
是不可能的。