如何避免使用instanceof?

时间:2015-08-08 15:47:23

标签: java polymorphism override instanceof

假设我有一些实体类层次结构,并且我有一个带有方法的util类,它获取上层类层次结构,并且必须根据我的特定类在另一个实体类(在前一个层次结构中)之间进行一些更改拿到 。 所以我将使用instanceof来查找我得到的具体对象。 但我知道 : 任何时候你发现你自己编写的形式的代码“如果对象是T1类型,那么做一些事情,但如果它是T2类型,那么做其他事情,”打自己。 那么如何在不使用instanceof的情况下实现呢?

请注意,我不想将util方法放在实体类中,因为我希望用户(实现程序员)能够实现该方法,但我不希望它们能够更改实体。

2 个答案:

答案 0 :(得分:3)

而不是:

// BAD:
public void doStuff(Parent p) {
    if (p instanceof Child1)
        doThis();
    else if (p instanceof Child2)
        doThat();
    else if …
}

这样做:

// GOOD:
public class Parent {
    public void doIt();
}

public class Child1 extends Parent {
    @Override
    public void doIt() { /* the contents of doThis */ }
}

public class Child2 extends Parent {
    @Override
    public void doIt() { /* the contents of doThat */  }
}

public void doStuff(Parent p) {
    p.doIt();
}

(代码可能不是100%正确(我的Java有点生疏)但我希望你明白这一点。)

这称为 多态

答案 1 :(得分:0)

方法重载是您可能想要查看的内容。