gpt4 book ai didi

java泛型协方差

转载 作者:IT老高 更新时间:2023-10-28 20:50:11 25 4
gpt4 key购买 nike

我无法理解以下文章: http://www.ibm.com/developerworks/java/library/j-jtp01255.html

下,

Generics are not covariant

作者说,

Because ln is a List, adding aFloat to it seems perfectly legal. Butif ln were aliased with li, then itwould break the type-safety promiseimplicit in the definition of li --that it is a list of integers, whichis why generic types cannot becovariant.

我无法理解它所说的部分“如果 ln 别名为 li”。作者所说的别名是什么意思?(引用?)。引用行上方的代码片段似乎说明了 java 中什么是非法的,而不是为什么。如果有人可以举例说明,那对我很有帮助。提前致谢。

最佳答案

List<Integer> li = new ArrayList<Integer>();
List<Number> ln = li; // illegal
ln.add(new Float(3.1415));

在 Java 中,整数继承自 Number (java.lang.Number) ,如此直观,任何整数 (java.lang.Integer)也是一个数字,但那篇文章指出的是,对于泛型,它不能以这种方式工作,因为考虑到这个例子,你最终可能会将一个 float (它是一个数字)放入 List<Integer> ,这是非法的,因为 float 不是整数。

结论:泛型不是协变的。

注意:我推荐你阅读Effective Java (2nd Edition) Chapter 5: Generics。

关于java泛型协方差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2660827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com