switch和枚举的小坑

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

class

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

可能不少人没有见过synthetic类,特意补上,以下:优化

synthetic
相关文章
相关标签/搜索