当前位置: 首页 > 知识库问答 >
问题:

Java泛型:List和List有区别

朱俭
2023-03-14

以下代码之间有什么区别吗?

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);
    }
}

如果是的话,有人能解释一下区别以及何时使用什么?

共有2个答案

周志文
2023-03-14

第一个语句使用有界类型参数E,而第二个语句使用通配符参数。第一个语句是有界的,因为它“限制可以在参数化类型中用作类型参数的类型”。,在你的例子中,说它是某种类型的列表,但是我们不知道它是什么。它是无界类型。

凌炜
2023-03-14

这是有区别的,尽管这不是直观的。我建议阅读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类依赖于它。 我理解整个类型擦除问题,我真的只是想让编译器开心。