在java中处理这个问题的首选方法是什么

Kri*_*ket 2 java oop polymorphism

假设我有以下课程:

public interface X {
...
}

public class A implements X {
...
}

public class B implements X {
...
}
Run Code Online (Sandbox Code Playgroud)

现在让我说我有一个方法,它采用X类型的对象,并且必须以不同方式处理X的每个实现.天真的做法是:

public void doSomething(X x) {
  if(x instanceof A)
    doSomethingA((A) x);
  else if(x instanceof B)
    doSomethingB((B) x);
}
Run Code Online (Sandbox Code Playgroud)

......但这看起来特别难看,而且不是多态的.一般来说处理这种情况的干净方法是什么?

编辑:当然,如果我可以将doSomething()的实现推送到A类和B类,那将会很容易,但在那些没有意义的情况下呢?即doSomething()是在C类上定义的,并且实现高度依赖于C的内部状态.

Wiz*_*art 6

这很简单:

public interface X {
  int doSomething();
}

public class A implements X {
  public int doSomething() {
    // implementation in A
  }  
}

public class B implements X {
  public int doSomething() {
    // implementation in B
  }  

}
Run Code Online (Sandbox Code Playgroud)

更新:好的,似乎在这里我们在C中有一些算法,它依赖于C的状态以及A/B的差异.然后我会尝试拆分该算法,以便C类只有A和B的通用实现,并且A/B相关的部分应该作为在C中调用的相同方法的特定实现转到适当的类.如果可能的话,C的状态可以部分传递给A和B的doSomething