我如何为任何类型的Map<S,Map<Class<T>,T>>
打字?
如果我使用该公式,那么地图将只包含具体的S,T类型。如果我使用通配符Map<?,Map<Class<?>,?>>
,则最后2个通配符将不会强制相关。
任何解决方案?
答案 0 :(得分:3)
您可以创建一个类,仅用于保持这种关系。
public class ClassMap<T> extends HashMap<Class<T>, T> {}
然后你可以写:
Map<?, ClassMap<?>>
答案 1 :(得分:1)
如果您要求提供以下内容:
Cat cat = map.get(Cat.class);
Dog dog = map.get(Dog.class);
然后不,用Java做不可能。
作为旁注,使用Class<T>
表示地图只能包含一个键(T的确切类)。请改用Class<? extends T>
。