这是我最近在一次面试中提出的一个问题,当时候选人希望看到一些东西被添加到 Java 语言中。Java 没有 具体化的泛型通常被认为是一种痛苦,但是,当被推动时,候选人实际上不能告诉我,如果他们在那里他可以实现什么样的事情。
显然,由于 Java 中允许使用原始类型(以及不安全的检查) ,因此有可能颠覆泛型,最终得到(例如)实际包含 String
的 List<Integer>
。如果将类型信息具体化,这显然是不可能的; 但肯定不止这些!
人们可以张贴的事情的例子,他们真正想做的事情,被具体化的泛型可用?我的意思是,显然你可以在运行时获得 List
的类型-但是你会用它做什么呢?
public <T> void foo(List<T> l) {
if (l.getGenericType() == Integer.class) {
//yeah baby! err, what now?
编辑 : 这个问题的一个快速更新,因为答案似乎主要是关于需要传递一个 Class
作为参数(例如 EnumSet.noneOf(TimeUnit.class)
)。我更多的是在寻找类似 这是不可能的的东西。例如:
List<?> l1 = api.gimmeAList();
List<?> l2 = api.gimmeAnotherList();
if (l1.getGenericType().isAssignableFrom(l2.getGenericType())) {
l1.addAll(l2); //why on earth would I be doing this anyway?