我有一个抽象类X
和一些扩展该类的类,称它们为A
、B
和C
.
在其他一些类Y
中,我有一些取决于类类型的方法调用。 if-else 语句如下所示:
public class Y implements InterfaceY {
public Y(){
}
public String doStuff (X x, Boolean flag) {
String s = "";
if (x instanceof A) {
doStuff((A) x));
} else if (x instanceof B) {
doStuff((B) x));
} else if (x instanceof C) {
doStuff((C) x, flag);
} else {
throw new Exeption();
}
return s;
private String doStuff(A a) {
return "";
}
private String doStuff(B b) {
return "";
}
private String doStuff(C c, Boolean flag) {
return "";
}
}
请注意,所有方法都具有相同的名称 (doStuff()
),但根据类(有时是标志)调用该方法的不同方法实现。当然,一旦从 X 扩展的类别增加,这看起来很糟糕并且变得非常复杂。
有没有什么方法可以让我创建一个中间接口(interface)(或其他东西)来处理大多数(或全部)if-else 语句?
最佳答案
首先将这些方法从这里取出来,分别放到A、B、C类中,实现X接口(interface)。
private String doStuff(A a) {
return "";
}
private String doStuff(B b) {
return "";
}
private String doStuff(C c, Boolean flag) {
return "";
}
然后:
if (x instanceof A) {
doStuff((A) x));
} else if (x instanceof B) {
doStuff((B) x));
} else if (x instanceof C) {
doStuff((C) x, flag);
可以只是x.doStuff();
(您甚至不必传递A、B、C,因为这将是方法内的this
。您必须使用的标志更具体地取决于您的代码。例如,其他 2 个 doStuff
方法也可以接受该标志,但只需忽略它)
关于Java:扩展类的 if-else 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18897791/