簡體   English   中英

泛型語法map.entry

[英]generics syntax map.entry

我有一個變量:

Class<Map.Entry<String, Boolean>> clazz;

我想為它分配一個類而不實例化任何東西。 但編譯器不允許我寫:

Class<Map.Entry<String, Boolean>> clazz = Map.Entry<String, Boolean>.class;

我怎么做作業?

Class<Map.Entry<String, Boolean>> clazz =
    (Class<Map.Entry<String, Boolean>>)(Class<?>)Map.Entry.class;

啊,類型擦除的樂趣。

Java編譯器區分Map.Entry (raw)和Map.Entry<String, Boolean> (參數化)類型。 不幸的是,您無法使用.class在類型文字中添加類型參數。 所以你必須施展。 但你不能直接這樣做; 你必須通過Class<?>進行'繞道'。 我不記得為什么,確切地說,我很抱歉:)。

此外,你會得到一個“未經檢查”的警告,你可以壓制它,因為你知道(在這種情況下)演員陣容將永遠成功。 所以:

@SuppressWarnings("unchecked")
Class<Map.Entry<String, Boolean>> clazz =
    (Class<Map.Entry<String, Boolean>>)(Class<?>)Map.Entry.class;

(無需在發生此分配的方法上發出警告;您可以直接將其放在分配之前。)

請享用! :)

暫無
暫無

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

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