我該如何爲任何類型的類型保存類似Map<S,Map<Class<T>,T>>
的東西?是否有一種方法可以在類類型的定義中重用通用通配符?
如果我使用該公式,那麼地圖將只保存具體的S,T類型。如果我使用通配符Map<?,Map<Class<?>,?>>
,則最後的兩個通配符將不會強制關聯。
任何解決方案?
我該如何爲任何類型的類型保存類似Map<S,Map<Class<T>,T>>
的東西?是否有一種方法可以在類類型的定義中重用通用通配符?
如果我使用該公式,那麼地圖將只保存具體的S,T類型。如果我使用通配符Map<?,Map<Class<?>,?>>
,則最後的兩個通配符將不會強制關聯。
任何解決方案?
您可以創建一個類,以保持這種關係的唯一目的。
public class ClassMap<T> extends HashMap<Class<T>, T> {}
然後,你可以寫:
Map<?, ClassMap<?>>
真的很棒,很明顯,確實....非常感謝你......今天咖啡太少了:) – Whimusical
如果你問的線沿線的東西:
Cat cat = map.get(Cat.class);
Dog dog = map.get(Dog.class);
則沒有,這是不可能在Java中的事情。
作爲一個附註,使用Class<T>
意味着地圖將永遠只能包含一個關鍵字(確切的T類)。改爲使用Class<? extends T>
。
這取決於您在S和T中輸入的值。您是否可以在您打算使用此代碼的地方發佈一個示例代碼? – njzk2
對於'S'和'T'這個'Map
可能會更整潔地定義一個接口'MyGenericMap
擴展Map,T >>'(並提供一個包裝'Map'的實現)。這種泛型會傷害我的眼睛和頭部。 –