是否可以在 switch 语句中使用 instanceof 运算符?

2022-08-31 04:58:01

我有一个使用对象开关案例的问题:instanceof

例如:我的问题可以用Java重现:

if(this instanceof A)
    doA();
else if(this instanceof B)
    doB();
else if(this instanceof C)
    doC():

如何使用 ?switch...case


答案 1

这是子类型多态性提供帮助的典型方案。请执行下列操作

interface I {
  void do();
}

class A implements I { void do() { doA() } ... }
class B implements I { void do() { doB() } ... }
class C implements I { void do() { doC() } ... }

然后,您只需调用.do()this

如果您不能自由地更改 、 、 和 ,则可以应用访问者模式来实现相同的目的。ABC


答案 2

如果您绝对无法编码到接口,则可以使用枚举作为中介:

public A() {

    CLAZZ z = CLAZZ.valueOf(this.getClass().getSimpleName());
    switch (z) {
    case A:
        doA();
        break;
    case B:
        doB();
        break;
    case C:
        doC();
        break;
    }
}


enum CLAZZ {
    A,B,C;

}