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