需要以下上下文:这种编码方式的目的是避免if- else语句和instanceof; 这总是一个坏主意.
我有3个类,有以下签名:
abstract class A {}
class B extends A {}
class C extends A {}
Run Code Online (Sandbox Code Playgroud)
然后我有另一个具有以下结构的类:
class MyClass {
private final A model;
public MyClass(A m) {
this.model = m;
}
public void doSomething() {
System.out.println(this.model instanceof C); //TRUE!!
execute(this.model);
}
private void execute(A m) {
System.out.println("noo");
}
private void execute(C m) {
System.out.println("yay");
}
}
Run Code Online (Sandbox Code Playgroud)
最后我的主要内容:
public static void main(String... args) {
C mod = new C();
MyClass myClass = new MyClass(mod);
myClass.doSomething();
}
Run Code Online (Sandbox Code Playgroud)
现在问题; execute(C)方法永远不会被执行,它总是执行(A)方法.我怎么解决这个问题?我无法更改执行(A)方法的签名以执行(B),因为这会在MyClass#doSomething中给出一个错误,指出java"无法解析方法execute(A)".