gpt4 book ai didi

java - Java中m1和m2泛型方法的区别

转载 作者:行者123 更新时间:2023-11-30 01:42:40 25 4
gpt4 key购买 nike

有人可以帮助我理解 m1() 和 m2() 泛型方法之间的区别吗?

class C1 {
<T extends Number> void m1(List<T> list){
System.out.println(list);
for (T t : list){
System.out.println(t);

}
}

void m2(List<? extends Number> list){
for(Number n :list){

}

}
}

最佳答案

这两个片段之间没有功能差异。它们做同样的事情,同样灵活,具有相同的签名,并且基本上编译为完全相同的类文件。

第一个片段说:有某种类型;我们将其限制为 java.lang.Number 或其某些子类型。然后,此类型出现两次:一次作为列表上的类型参数(因此,它是数字列表,或整数列表,或 double 列表等),一次作为变量的类型,当我们迭代列表中的每个元素。关于 for (T t : list) 中的 t 变量,您只能知道它至少是 java.lang.Number,但这就是您所知道的全部。

在第二个片段中,您说:我们有一个 java.lang.Number 或其任何子类型的列表。我们对这个列表所做的就是迭代它,此时可以确定,当您迭代这个列表时,掉出的项目至少是一个 java.lang.Number.

在这两种情况下,循环变量(第一个代码段中的 T t,第二个代码段中的 Number n)都绑定(bind)为 java.lang.Number 并且可以用作数字。

关于java - Java中m1和m2泛型方法的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59417961/

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