[英]Why EnumMap constructor needs class argument?
EnumMap類構造函數需要類作為參數。 大多數時候K.class作為參數傳遞。 我仍然沒有得到接受這個作為論據的原因,而不是從K推斷。
謝謝
- pkc
EnumMap
的實現需要關於enum
元信息,特別是值的數量。 Class
對象提供了這個信息(對於特定的枚舉描述符類型,最好是IMO)。 如果您沒有可用的Class
,則可以始終使用HashMap
。 我想你可以創建一個可增長/未提交的類似EnumMap
的Map
。
因此, Map
知道所有可能的鍵。 它被稱為(內部) keyUniverse
。 評論說:
所有值都包含K.( 緩存性能 )
正如其他人指出泛型是編譯器功能。 jvm對泛型本身沒有真正的支持。 這意味着通用信息不能在運行時使用。
對於EnumMap<K extends Enum>
這意味着您在運行時獲得EnumMap<Enum>
而沒有關於K的任何信息。通過將Generic參數的類作為類傳遞給構造函數,可以解決Java泛型的這種限制。對象在運行時仍然存在。
泛型是一個編譯時功能,但是在運行時需要這個K類,在這種情況下泛型不會做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.