使用子类"no suitable method found"的动态绑定



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)

要解决您的问题,请尝试以下操作。

首先创建一个在类Avoid 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不是BC的子类,而是BCA的子类。因此,将类型 A 的对象传递给方法 fill 是不可能的。

相关内容

  • 没有找到相关文章

最新更新