我可以在地图中使用通配符,例如Map <Class <?>,?>

moh*_*945 4 java generics

我有一个私人实例

private final Map<Class<?>, ?> map;
Run Code Online (Sandbox Code Playgroud)

从语法上讲,这是正确的.我想做的就是这个.

public class User {
}
public class UserSubclass extends User {
}
public class Role {
}

map.put(User.class, new User()); // valid
map.put(User.class, new UserSubclass()); // valid
map.put(Role.class, new Role()); // valid
// But when I do the following I need to get an error
map.put(User.class, new Role(); // invalid, compiler error
Run Code Online (Sandbox Code Playgroud)
  1. 我该如何申报地图?
  2. 如何将HashMap的对象实例化到此Map?

Joa*_*uer 5

不,简单java.util.Map不支持这一点.它是静态类型的,你要求的基本上是基于另一个参数的运行时类型动态键入一个参数.

但是,GuavaClassToInstanceMap完全符合您的要求:

一个映射,每个条目将Java原始类型映射到该类型的实例.除了实施Map之外putInstance(java.lang.Class<T>, T),getInstance(java.lang.Class<T>)还提供额外的类型安全操作.