【发布时间】:2013-09-19 14:42:17
【问题描述】:
我有一个抽象类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 扩展的类增加,这看起来很可怕并且变得非常复杂。
有什么方法可以让我创建一个中间接口(或其他接口)来处理大部分(或所有)if-else 语句?
【问题讨论】:
-
在你的if中,
X应该是x吗? -
@jonhopkins,确实如此。我会解决的。
-
通常,在面向对象的上下文中,如果您使用过多的
instanceof,您的设计可能是错误的。当然这就是你在这里发帖的原因:) -
我想在我们给出正确答案之前,我们需要知道:(1)你能在
X中添加方法吗? (2) 可以给A、B、C添加方法吗?如果它们都是您自己程序的一部分,那么这两个问题的答案都应该是肯定的;但有时我们不得不面对我们无法修改的库类的这些问题。 -
@ajb,我可以更改任何我想要的课程。但是由于这只是一个巨大产品的一小部分,改变抽象/超级/接口类中的某些内容意味着重构一大堆代码。这就是为什么对我来说最好的解决方案是一些中级课程。
标签: java interface polymorphism abstract-class