EnumMap類的構造函數需要class作爲參數。 K.class大部分時間都是作爲參數傳遞的。我仍然沒有得到什麼是接受這個作爲參數,而不是從推導K.爲什麼EnumMap構造函數需要類參數?
感謝
的原因 - PKC
EnumMap類的構造函數需要class作爲參數。 K.class大部分時間都是作爲參數傳遞的。我仍然沒有得到什麼是接受這個作爲參數,而不是從推導K.爲什麼EnumMap構造函數需要類參數?
感謝
的原因 - PKC
的Map
因此知道所有可能的密鑰。它被稱爲(內部)keyUniverse
。評論說:
所有包括K.值(緩存性能)的
EnumMap
的需求的實現方式中的元信息有關enum
,特別值的數量。 Class
對象提供了這個信息(國際海事組織最好去一個特定的枚舉描述符類型)。如果你沒有Class
可用,你總是可以使用HashMap
在一些懲罰。我想你可以創建一個可增長/未提交的EnumMap
-Map
。
Tom's答案是正確的,但要解決您的其他問題:此信息不能從類型參數K
推導出的原因歸因於type erasure。
泛型是一個編譯時的特性,但是這個K類在運行時是需要的,在這種情況下泛型不會做。
正如其他人指出的泛型是一個編譯器功能。 jvm對泛型本身沒有真正的支持。這意味着通用信息不能在運行時使用。
對於EnumMap<K extends Enum>
這意味着你在運行時得到一個EnumMap<Enum>
沒有關於K. Java泛型的這種限制可以通過周圍的傳遞通用參數的類構造函數中工作的任何信息的類的對象仍然存在於運行。
HashMap不能爲空,但如果它僅包含一些元素而不包含完整的keyUniverse,那很好。 – 2017-05-19 20:13:40