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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM