从泛型类集合中进行java类型安全检索
我有一个通用容器,其中包含类型E的对象:
public class Container<E> {
private final E e;
public Container(E e) {
this.e = e;
}
public E get() {
return e;
}
}
我有一个可以装各种容器的桶:
public class Bucket {
private final Map<String, Container<?>> containers = new HashMap<>();
public void put(String name, Container<?> container) {
containers.put(name, container);
}
public Container<?> get(String name) {
Container<?> container = containers.get(name);
return container;
}
}
我希望能够将容器(各种类型)放入桶中,并以类型安全的方式将其取回
Container<Long> longs = new Container<>(100L);
Container<String> strings = new Container<>("Hello");
Bucket bucket = new Bucket();
bucket.put("longs", longs);
bucket.put("strings", strings);
但正如你所能看到的,我失去了类型安全:
Container<?> longs1 = bucket.get("longs");
Container<?> strings1 = bucket.get("strings");
我似乎不知道需要什么才能实现以下目标:
Container<Long> longs1 = bucket.get("longs");
Container<String> strings1 = bucket.get("strings");
# 1 楼答案
我的解决方案。我想它很好地满足了我的需要:
进行测试: