gpt4 book ai didi

java - 上限通配符与绑定(bind)类型参数有什么不同?

转载 作者:行者123 更新时间:2023-12-02 04:04:08 28 4
gpt4 key购买 nike

两者都用作限制机制,并且java文档说上限通配符将允许所有子类作为变量,而绑定(bind)类型参数仅接受声明的类引用变量。

我的问题是。例如,如果我们采用 Number 父类(super class)并将其声明为绑定(bind)类型参数,那么在实际场景中,无论子类类型如何,它通常也会接受所有子类变量。那么为什么要使用外卡呢?

最佳答案

根据文档 The term List<Number> is more restrictive than List<? extends Number> because the former matches a list of type Number only, whereas the latter matches a list of type Number or any of its subclasses.

upperBounded

考虑这个例子

import java.util.Arrays;
import java.util.List;


public class Sample {

public static double sumOfList(List<? extends Number> list) {
double s = 0.0;
for (Number n : list)
s += n.doubleValue();
return s;
}
public static void main(String[] args) {
List<Double> ld = Arrays.asList(1.2, 2.3, 3.5);
System.out.println("sum = " + sumOfList(ld));
}

}

以上工作正常,但如果将此行更改为 public static double sumOfList(List<Number> list) {

然后这一行会提示

System.out.println("sum = " + sumOfList(ld));将其更改为数字,即 List<Number> ld或更改

或将 sub 更改为 public static double sumOfList(List<Double> list) {

关于java - 上限通配符与绑定(bind)类型参数有什么不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34542180/

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