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

新手上路,请多包涵

我有一个为 instanceof 对象使用开关盒的问题:

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

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

如何使用 switch...case 来实现?

原文由 olidev 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

这是子类型多态性有帮助的典型场景。请执行下列操作

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 ,您可以应用访问者模式来实现相同的效果。

原文由 jmg 发布,翻译遵循 CC BY-SA 2.5 许可协议

如果您绝对不能对接口进行编码,那么您可以使用枚举作为中介:

 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;

}

原文由 Nico 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题