我有一个私人实例
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)
不,简单java.util.Map不支持这一点.它是静态类型的,你要求的基本上是基于另一个参数的运行时类型动态键入一个参数.
但是,Guava类ClassToInstanceMap完全符合您的要求:
一个映射,每个条目将Java原始类型映射到该类型的实例.除了实施
Map之外putInstance(java.lang.Class<T>, T),getInstance(java.lang.Class<T>)还提供额外的类型安全操作.
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |