簡體   English   中英

為什么EnumMap構造函數需要類參數?

[英]Why EnumMap constructor needs class argument?

EnumMap類構造函數需要類作為參數。 大多數時候K.class作為參數傳遞。 我仍然沒有得到接受這個作為論據的原因,而不是從K推斷。

謝謝
- pkc

Tom的答案是正確的,但要解決你的另一點:這個信息不能僅僅從類型參數K推斷出來的原因是由於類型擦除

EnumMap的實現需要關於enum元信息,特別是值的數量。 Class對象提供了這個信息(對於特定的枚舉描述符類型,最好是IMO)。 如果您沒有可用的Class ,則可以始終使用HashMap 我想你可以創建一個可增長/未提交的類似EnumMapMap

因此, Map知道所有可能的鍵。 它被稱為(內部) keyUniverse 評論說:

所有值都包含K.( 緩存性能

正如其他人指出泛型是編譯器功能。 jvm對泛型本身沒有真正的支持。 這意味着通用信息不能在運行時使用。

對於EnumMap<K extends Enum>這意味着您在運行時獲得EnumMap<Enum>而沒有關於K的任何信息。通過將Generic參數的類作為類傳遞給構造函數,可以解決Java泛型的這種限制。對象在運行時仍然存在。

泛型是一個編譯時功能,但是在運行時需要這個K類,在這種情況下泛型不會做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM