这是我最近在一次采访中提出的一个问题,作为候选人希望看到添加到 Java 语言中的东西。Java 没有具体化泛型通常被认为是一种痛苦,但是当被推动时,候选人实际上无法告诉我如果他们在那里他可以实现什么样的事情。
显然,因为 Java 中允许使用原始类型(以及不安全检查),所以有可能颠覆泛型并最终得到一个List<Integer>
(例如)实际上包含String
s 的类型。如果类型信息被具体化,这显然是不可能的;但肯定不止这些!
人们是否可以发布他们真正想做的事情的示例,是否可以使用具体化的泛型?我的意思是,显然你可以List
在运行时获得 a 的类型——但你会用它做什么呢?
public <T> void foo(List<T> l) {
if (l.getGenericType() == Integer.class) {
//yeah baby! err, what now?
编辑:对此的快速更新,因为答案似乎主要关注需要传入 aClass
作为参数(例如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?