【发布时间】:2021-03-17 08:23:48
【问题描述】:
我有一个通用的容器,它包含 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");
【问题讨论】:
-
您可以在最后一个 sn-p 工作中进行分配,但只能通过在正确的位置进行转换,基本上会覆盖编译器的不确定性。基本上你无法实现目标。
标签: java generics collections