Java:扩展类的 if-else 实例

标签 java interface polymorphism abstract-class

我有一个抽象类X和一些扩展该类的类,称它们为ABC.

在其他一些类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/

相关文章:

java - 如何从 json 响应中动态删除字段?

.net - List.ForEach 方法和集合接口(interface)

java - 实例化另一个抽象类的内部抽象类

C++ 将 RAII 与多态性和堆栈分配结合使用

c++如何继承返回特定类型的运算符

java - 如何构造顶点均为偶数度的连通图的任意2正则分离?

java - 如何从可用作自定义实体 ID 生成器中实体 ID 的对象属性生成 UID?

c++ - 如何在多态性中为指定类型分配内存?

Java:按契约(Contract)注释设计

java - 是否可以创建一个与 Java 中特定隐藏 api 接口(interface)兼容的接口(interface)?