gpt4 book ai didi

java - 下界通配符

转载 作者:行者123 更新时间:2023-11-29 05:03:51 25 4
gpt4 key购买 nike

我试图理解以下代码片段,在 stackoverflow 上搜索了关于 lowerbound 的链接和 upperbound

只是试图克服以下行中的困惑,

si=s//OK why? arrays of objects can be implicitly casted to arrays of integers?

 List<? extends Number> l = new ArrayList<>();
List<? extends Integer> i = new ArrayList<>();
l = i;//OK i is a subtype of l

List<? super Number> s = new ArrayList<>();
List<? super Integer> si = new ArrayList<>();

si = new ArrayList<Integer>();//OK understand integer matches the pattern of ? super Integer
s = new ArrayList<Object>();//OK understand that object is superclass of Number

si=s//OK why? arrays of objects can be implicitly casted to arrays of integers?

//consider this
List<Integer> integers = new ArrayList<Integer>();
List<Object> objects = new ArrayList<Object>();
integers = objects; //NOT OK Type mismatch: cannot convert from List<Object> to List<Integer>

//consider this
Integer ten = 10; //integer ten
Object none = new Object();//some none
ten = none;//NOT OK none cannot be implicitly casted to ten

感谢任何帮助

最佳答案

请记住,gnerics 是为了编译器的利益而不是运行时信息。

当您执行 si = s 时,您将一个 Number 父类(super class)的列表分配给一个变量,该变量可以引用 Integer 父类(super class)的列表。

如果它是一个 Number 列表,它仍然是一个 Something 列表,它是 Integer 的父类(super class)。

我们知道它实际上是一个 Object 的数组列表,因为您之前已经分配过。

我们还知道 ArrayList of Object 扩展了 List of Object。

Object 列表是 Number 父类(super class)的列表,这就是之前的赋值有效的原因。

我们还知道 List of Object 是 Integer 的父类(super class)的列表,但这与编译器无关,它只关心 Number 的任何父类(super class)也是 Integer 的父类(super class)。

关于java - 下界通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31085313/

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