工作項目中的 online 和 room 有使用到反射,在一次加需求的時候,發現了某實現類中有眾多if else
,看着實在難受。於是,手動"優化"成switch
,結果發現 online 和 room 啟動報錯了。一開始怎么也沒想到是眾多if else
改成switch
造成的。直到發現輸出class
文件的目錄下多了個RoomHandlerImpl$1.class
如圖:
然后反編譯后就會看見$SwitchMap$yourCase'Enumeration
,你case
的枚舉元素就會在這個類中。后來發現只要使用了switch case
枚舉,就會生成這么一個synthetic
類
所以,在長連接服務器啟動的時候會掃描指定包下的類,然后調用newInstance
方法。問題就出在這兒了,因為該類是synthetic
,無法被實例化,所以會產生java.lang.InstantiationException
,定位到問題,結束!
可能很多人沒有見過synthetic
類,特地補上,如下: