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
相關文章
相關標籤/搜索