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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值