有没有办法在类类型的定义中重用通用通配符?

时间:2016-10-18 13:29:53

标签: java generics

我如何为任何类型的Map<S,Map<Class<T>,T>>打字?

如果我使用该公式,那么地图将只包含具体的S,T类型。如果我使用通配符Map<?,Map<Class<?>,?>>,则最后2个通配符将不会强制相关。

任何解决方案?

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>