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

我对instanceof对象使用开关盒有疑问:


例如:我的问题可以用Java复制:


if(this instanceof A)

    doA();

else if(this instanceof B)

    doB();

else if(this instanceof C)

    doC():

如何使用实施switch...case?


莫回无
浏览 1262回答 3
3回答

摇曳的蔷薇

这是子类型多态性有帮助的典型方案。请执行下列操作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。如果您不能随意更改A,B和C,则可以应用访问者模式来实现相同目的。

婷婷同学_

如果绝对不能编写接口代码,则可以使用枚举作为中介: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;}

皈依舞

万一有人阅读,以防万一:java中的最佳解决方案是:public enum Action {     a{        void doAction(...){            // some code        }    },     b{        void doAction(...){            // some code        }    },     c{        void doAction(...){            // some code        }    };    abstract void doAction (...);}这种模式的巨大好处是:您就像这样做(根本没有开关):void someFunction ( Action action ) {    action.doAction(...);   }如果添加名为“ d”的新动作,则必须实施doAction(...)方法注意:此模式在Joshua's Bloch“有效Java(第2版)”中进行了描述
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java