gpt4 book ai didi

Java 通用类型 : difference between List 和 List

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

Java 泛型类型:有什么区别

(1) List <? extends Number>   
(2) List <T extends Number>

据我了解

(1) List <? extends Number>是个具有父类(super class)“数字”的“未知”数据类型的只读列表。我们只能读取元素但不能添加

(2) List <T extends Number>具有父类(super class)“数字”的数据类型列表。我们可以读取并添加元素到列表中

请看下面的代码示例

class TestGen{

public static void main(String[] args) {
double result = 0.0;

List<Integer> intList = new ArrayList<Integer>();
intList.add(10);
intList.add(20);
intList.add(30);

result = TestGen.sumOfList1(intList);
System.out.println("Result=" + result);
result = TestGen.sumOfList2(intList);
System.out.println("Result=" + result);
}

public static double sumOfList1(List<? extends Number> list) {
double s = 0.0;
for (Number n : list)
s += n.doubleValue();
return s;
}

public static <T extends Number> double sumOfList2(List<T> list) {
double s = 0.0;

// getting error while trying to add new element
// list<T> is not applicable for argument(Integer) : Why ?
list.add(new Integer(40));

for (Number n : list)
s += n.doubleValue();

return s;
}
}

当我尝试将 Integer(甚至 Number 对象)添加到 sumOfList2 中时,会出现错误。请解释这里有什么问题?

最佳答案

基本的区别是如果你使用 T extends Number那么可以引用类型T :
list.add((T) new Integer(40));

如果你使用 ? extends Number那么你可以引用类型,但你仍然可以说:
((List<Integer>)list).add((int) s);

关于Java 通用类型 : difference between List <? extends Number> 和 List <T extends Number>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18187005/

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