我有一個變量:泛型語法的Map.Entry
Class<Map.Entry<String, Boolean>> clazz;
我想將類分配給它沒有任何實例。但編譯器不讓我寫:
Class<Map.Entry<String, Boolean>> clazz = Map.Entry<String, Boolean>.class;
我該怎麼做這個任務?
我有一個變量:泛型語法的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
(原始)和Map.Entry<String, Boolean>
(參數化)。不幸的是,您不能使用.class
在類型字面量中添加類型參數。所以你必須施放。但是你不能直接這樣做;您必須通過Class<?>
進行'繞道'。我不記得爲什麼,確切地說,我很抱歉:)。
此外,你會得到一個'unchecked'警告,你可以壓制,因爲你知道(在這種情況下)演員總是會成功。所以:
@SuppressWarnings("unchecked")
Class<Map.Entry<String, Boolean>> clazz =
(Class<Map.Entry<String, Boolean>>)(Class<?>)Map.Entry.class;
(沒有必要把警告在哪裏這個任務發生的方法,你可以把它直接在任務面前。)
享受! :)
你是什麼意思分配類沒有實例化任何東西?可能你需要給它分配'null'? – 2012-07-28 12:17:23
你想做什麼,對我沒有任何意義。你能解釋你的意圖嗎? – nullpotent 2012-07-28 12:18:56
我想有一個類型的對象分配給我的變量。我可以用新的Map.Entry()。getClass(more-less)做到這一點,但我不想實例化新的對象只是爲了得到它的類 – piotrek 2012-07-28 12:26:03