为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

莫回无 2019-10-16 11:13:31
我对instanceof对象使用开关盒有疑问:例如:我的问题可以用Java复制:if(this instanceof A)    doA();else if(this instanceof B)    doB();else if(this instanceof C)    doC():如何使用实施switch...case?
查看完整描述

3 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

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


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


查看完整回答
反对 回复 2019-10-16
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

如果绝对不能编写接口代码,则可以使用枚举作为中介:


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;


}


查看完整回答
反对 回复 2019-10-16
?
皈依舞

TA贡献1851条经验 获得超3个赞

万一有人阅读,以防万一:


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版)”中进行了描述


查看完整回答
反对 回复 2019-10-16
  • 3 回答
  • 0 关注
  • 1261 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信