说吧,我有一个方法:
public static <T> Collection<T> addToCollection(T element, Collection<T> collection) {
collection.add(element);
return collection;
}
然后当尝试编译此代码时:
Integer i = 42;
Collection<Integer> result = addToCollection(i, Collections.emptyList());
我收到一个错误Type mismatch: cannot convert from Collection<Object> to Collection<Integer>
。
谁能解释为什么类型系统无法推断 Collections.emptyList() 应该是类型Collection<Integer>
?
上面的例子显然是相当人为的,但我总是偶然发现这个限制,这真的很烦人。读完后有效的Java我发现你可以简单地做Collections.<Integer>emptyList()
(必须说,这对当时的我来说是一个很大的启示)并且一切都编译顺利,但是当你有一些复杂的类型时,这真的很麻烦。
我只是想知道这是否是某种错误,或者是否有任何有效的理由让它以这种方式工作?
Java 8 中改进了类型推断系统,引入了目标打字,以便为流和 lambda 提供更多表现力。因此,您的代码可以使用 Java 8 进行编译。
更多相关信息请参见更新了教程,在页面的最底部有一个非常相似的示例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)