以下代码之间有什么区别吗?
public static <E> void printElements(List<E> list) {
for (E elem : list) {
System.out.println(elem);
}
}
和
public static void printElements(List<?> list) {
for (Object elem : list) {
System.out.println(elem);
}
}
如果是的话,有人能解释一下区别以及何时使用什么?
第一个语句使用有界类型参数E
,而第二个语句使用通配符参数。第一个语句是有界的,因为它“限制可以在参数化类型中用作类型参数的类型”。?
,在你的例子中,说它是某种类型的列表,但是我们不知道它是什么。它是无界类型。
这是有区别的,尽管这不是直观的。我建议阅读java标准教程以了解更多细节。
基本上,这两种类型是不同且不兼容的<代码>列表
列表
public static double sumOfList(List<Number> list) {
double s = 0.0;
for (Number n : list)
s += n.doubleValue();
return s;
}
但是下面使用通配符的代码可以使用
List
public static double sumOfList(List<? extends Number> list) {
double s = 0.0;
for (Number n : list)
s += n.doubleValue();
return s;
}
问题内容: Java Generic type:之间有什么区别 根据我的理解 (1) 是具有超类“ Number”的“未知”数据类型的只读列表。我们只能读取元素,但不能添加 (2) 具有超类“ Number”的数据类型列表。我们可以 阅读并将 元素 添加 到列表中 请参见下面的代码示例 当我尝试将Integer(甚至Number对象)添加到sumOfList2时,出现错误。请在这里说明问题是什么?
问题内容: 和接口之间的根本区别是什么? 问题答案: 是元素的有序序列,而元素是无序的独特列表。 有序集合(也称为序列)。该界面的用户可以精确控制列表中每个元素的插入位置。用户可以通过其整数索引(列表中的位置)访问元素,并在列表中搜索元素。 一个不包含重复元素的集合。更正式地说,集合不包含元素对e1和e2,使得e1.equals(e2)最多包含一个空元素。顾名思义,此接口对数学集合抽象进行建模。
问题内容: 以下代码之间有什么区别: 和 Python建议采用一种做事方式,但有时似乎不止一种。 问题答案: 一个是函数调用,一个是文字: 使用第二种形式。它更具Python风格,并且可能更快(因为它不涉及加载和调用单独的函数)。
问题内容: 和Java 之间有什么区别?我什么时候应该使用哪个? 问题答案: 首先:a 是a 。但是,它是专门的。 A 就是这样:项目的集合。您可以添加内容,删除内容,迭代内容并查询其中有多少内容。 一个增加有关规定的东西,它的序列信息:你可以在获取位置的元素 ñ ,你可以在位置添加元素 ñ ,你可以在位置删除元素 ñ 。 在a中,您无法执行此操作:未定义“此集合中的第5个元素”,因为没有定义的顺
由于某些原因,我无法理解如何使用流将这个深度嵌套的列表转换为新的列表。 我尝试了很多不同的迭代,比如:
我有一个泛型类型的类,它接受构造函数参数,这样我就可以保留该类型。这是一个我在java代码中经常使用的类,所以我不想更改签名。当我尝试像这样使用构造函数时: 有办法解决这个问题吗?我无法更改的构造函数,太多的java类依赖于它。 我理解整个类型擦除问题,我真的只是想让编译器开心。