我有两种通用方法来计算List元素的总和。方法的签名是
double method1(List extends Number> list)-在这里我使用通配符。
double sumOfList1(List list)-这是类型参数的名称。
两者之间有什么区别还是功能相同?使用类型参数名称代替通配符有什么优势?
public static double sumOfList(List extends Number> list) {
double s = 0.0;
for (Number n : list)
s += n.doubleValue();
return s;
}
public static double sumOfList1(List list) {
double s = 0.0;
for (Number n : list)
s += n.doubleValue();
return s;
}
谢谢。
参考方案
绝对没有区别,声明U的目的是使您可以使用它:
public static void doSomething(List list, Consumer sink) {
list.forEach(sink::accept)
}
这意味着您不必关心U是什么,但是它必须从Number扩展。您关心的是List包含与Consumer可以接受的类型兼容的类型。
或者,您可以在方法内部使用U声明泛型的新实例:
public static List copy(List list) {
List copy = new ArrayList<>();
copy.addAll(list)
return copy;
}
是的,我知道,有更巧妙的方法可以做到这一点-请把它当作一个说明性的例子
Java中的<>>是什么意思? - java
This question already has answers here: Closed 7 years ago. Possible Duplicate: What does >> and >>> mean in Java?我在一些Java代码中遇到了一些陌生的符号,尽管代码可以正确编译和运行,但对于括号在此代码中的作用却感…List 是List 的子类吗?为什么Java泛型不是隐式多态的? - java
我对Java泛型如何处理继承/多态感到困惑。假设以下层次结构-动物(父母)狗-猫(儿童)因此,假设我有一个方法doSomething(List animals)。根据继承和多态性的所有规则,我假设List是List,而List是List>兼容 - java
我这里没有什么代码int b=3; b=b >> 1; System.out.println(b); 它可以完美工作,但是当我将变量b更改为byte,short,float,double时,它包含错误,但是对于变量int和long来说,它可以完美工作,为什么它不能与其他变量一起工作? 参考方案 位移位运算符(例如>>)与任何整数类型兼…菱形运算符<>是否等于 - java
我在util.TreeSet类中发现,其中一个构造函数正在使用具有空泛型类型的新TreeMap调用另一个构造函数。 public TreeSet(Comparator super E> comparator) { this(new TreeMap<>(comparator)); } new TreeMap<>是什么意思…Java-固定大小的列表与指定初始容量的列表之间的差异 - java
我在理解这一点上遇到了问题。当我们做 List list = Arrays.asList(array); 我们不能在该列表上使用添加,删除之类的方法。我知道Arrays.asList()返回固定大小的列表。我不明白的是,如果我们创建一个具有指定初始容量的列表,例如List list2 = new A…