zoukankan      html  css  js  c++  java
  • switch和枚举的小坑

    工作项目中的 online 和 room 有使用到反射,在一次加需求的时候,发现了某实现类中有众多if else,看着实在难受。于是,手动"优化"成switch,结果发现 online 和 room 启动报错了。一开始怎么也没想到是众多if else改成switch造成的。直到发现输出class文件的目录下多了个RoomHandlerImpl$1.class如图:

    class

    然后反编译后就会看见$SwitchMap$yourCase'Enumeration,你case的枚举元素就会在这个类中。后来发现只要使用了switch case枚举,就会生成这么一个synthetic
    所以,在长连接服务器启动的时候会扫描指定包下的类,然后调用newInstance方法。问题就出在这儿了,因为该类是synthetic,无法被实例化,所以会产生java.lang.InstantiationException,定位到问题,结束!

    可能很多人没有见过synthetic类,特地补上,如下:

    synthetic

  • 相关阅读:
    CSRF攻击原理
    大前端
    尊敬自己,才能拥有改变的力量
    重温尼采语录 序章
    人生的弹性 -- 观《聚宝盆》有感
    求学梦
    爱国情怀
    雾中见我
    找东西
    走在路上的感悟
  • 原文地址:https://www.cnblogs.com/eahau/p/11003142.html
Copyright © 2011-2022 走看看