【发布时间】:2015-07-16 14:43:03
【问题描述】:
我想创建一个类型安全的集合,它可以存储多个相同类型但具有类型安全参数的集合。标准方式:
Map<Key<?>, Object> container = new HashMap<>();
键包含对象的类型,get 方法转换为正确的类型(标准类型安全异构容器模式)。但我需要这样的东西:
container.put(Key, new HashMap<Long, String>);
类型本身是安全的(Map.class),但我不知道如何确保映射的键和值是长字符串类型。我怎么能用java做到这一点?
编辑
为了让事情更清楚:
Map<Class<?>, Object> container = new HashMap<>();
现在这个映射的类型安全实现:
public <T> void put(Class<T> key, T value) {
container.put(key, value);
}
public <T> T get(Class<T> key) {
return key.cast(container.get(key));
}
我现在可以以一种类型安全的方式做到这一点:
containerClass.put(Double.class, 2.0);
containerClass.put(Integer.class, 3);
当然还有:
containerClass.put(MyObject.class, myObject);
如果我想存储多个相同类型的值,我可以使用通用列表而不是对象作为值或具有标识符作为字段的特定键类。
但是
现在会发生什么?
Map<String, Integer> map = new HashMap<>();
containerClass.put(Map.class, map);
在这个实现中,它是一个以字符串为键、整数为值的映射是不安全的。我想存储各种对象和集合,但集合本身也必须是类型安全的。
【问题讨论】:
标签: java design-patterns collections type-safety