2016-10-18 34 views
2

我該如何爲任何類型的類型保存類似Map<S,Map<Class<T>,T>>的東西?是否有一種方法可以在類類型的定義中重用通用通配符?

如果我使用該公式,那麼地圖將只保存具體的S,T類型。如果我使用通配符Map<?,Map<Class<?>,?>>,則最後的兩個通配符將不會強制關聯。

任何解決方案?

+0

這取決於您在S和T中輸入的值。您是否可以在您打算使用此代碼的地方發佈一個示例代碼? – njzk2

+0

對於'S'和'T'這個'Map >',你仍然可以擁有任何東西,但是在你想要的時候不會有嚴格的類型將它拉回地圖 – Ash

+0

可能會更整潔地定義一個接口'MyGenericMap 擴展Map ,T >>'(並提供一個包裝'Map'的實現)。這種泛型會傷害我的眼睛和頭部。 –

回答

3

您可以創建一個類,以保持這種關係的唯一目的。

public class ClassMap<T> extends HashMap<Class<T>, T> {} 

然後,你可以寫:

Map<?, ClassMap<?>> 
+0

真的很棒,很明顯,確實....非常感謝你......今天咖啡太少了:) – Whimusical

1

如果你問的線沿線的東西:

Cat cat = map.get(Cat.class); 
Dog dog = map.get(Dog.class); 

則沒有,這是不可能在Java中的事情。

作爲一個附註,使用Class<T>意味着地圖將永遠只能包含一個關鍵字(確切的T類)。改爲使用Class<? extends T>

相關問題