这是我最近在一次采访中提出的一个问题,因为候选人希望看到 Java 语言中添加一些内容。这通常被认为是 Java 所没有的痛苦具体化泛型但是,当我催促时,这位候选人实际上无法告诉我,如果他们在那里,他可以实现哪些目标。
显然,因为 Java 中允许原始类型(以及不安全检查),所以有可能颠覆泛型并最终得到一个List<Integer>
(例如)实际上包含String
s。如果类型信息具体化,这显然是不可能的;但肯定不止这些!
人们可以发布一些事情的例子吗他们真的很想做,具体化仿制药可用吗?我的意思是,显然你可以得到 a 的类型List
在运行时 - 但你会用它做什么呢?
public <T> void foo(List<T> l) {
if (l.getGenericType() == Integer.class) {
//yeah baby! err, what now?
EDIT:对此进行快速更新,因为答案似乎主要关注是否需要传递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?
最让我困扰的是无法利用跨多个泛型类型的多重调度。以下是不可能的,但在很多情况下这将是最佳解决方案:
public void my_method(List<String> input) { ... }
public void my_method(List<Integer> input) { ... }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)