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是数据传输对象,不应该知道X Y,反之亦然,所以我不能简单地将填充方法添加到A,B,C类。
建议?
答案 0 :(得分:1)
fill(a)
不会自动匹配B和C参数,但会查找fill(A a)
。
要解决您的问题,请尝试以下操作。
首先在班级void fill(AClass c)
中创建一个抽象函数A
。
在班级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);
}
答案 1 :(得分:1)
我认为问题是A
不是B
或C
的子类,但B
和C
是{的子类{1}}。因此,将A
类型的对象传递给方法A
是不可能的。