当前位置: 首页 > 面试题库 >

Java通用类型:List 和List 之间的区别

乐城
2023-03-14
问题内容

Java Generic type:之间有什么区别

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

根据我的理解

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

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

请参见下面的代码示例

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



 类似资料:
  • 以下代码之间有什么区别吗? 和 如果是的话,有人能解释一下区别以及何时使用什么?

  • 问题内容: 我以为和列表上的“ + =”基本上可以做同样的事情-扩展列表而不创建新列表。 我希望可以打印以下代码,但是 为什么我收到此错误?区别在哪里? 我在python2.7.3和python3.4.0中进行了尝试。 问题答案: 使对象有 机会 就地更改对象。但这取决于的类型,这并不意味着对象已就地更改。 这样, 仍然需要重新分配 给;要么返回或新对象返回; 确实翻译成: 由于包含作业,因此在中

  • 问题内容: 有人可以解释这个代码吗? 输出: 问题答案: 将对象转换为列表时,它仅使用键。 但是,如果用方括号将其包围,则所有内容都将保持不变,只会使其成为s的列表,其中仅包含一项。 这是因为,当您使用循环遍历时,它也只使用了键: 但是,如果要获取键 和 值,请使用: 使用循环: 但是,当您输入时,它会为您提供: 有点误导:)

  • 问题内容: 我是Generic的新手,我的问题是:两个函数之间有什么区别: 功能1: 功能2: 问题答案: 第一个签名说:是一个ES列表。 第二个签名说:是某种类型的实例的,但是我们不知道类型。 当我们尝试更改方法时,区别变得明显,因此它需要第二个参数,该参数应添加到方法内部的列表中: 第一个效果很好。而且你不能将第二个参数更改为可以实际编译的任何参数。 实际上,我发现了一个更好的区别说明: 一个

  • 我从Firestore示例中复制了一段代码: 但是我得到了这个错误 这里出了什么问题?

  • 我是一个新手,我尝试运行一个GitHub项目,但遇到了一个错误,比如类型ListDynamic不是类型ListInt的子类型。Github链接 误差线 以上代码文件 如有任何帮助,我们将不胜感激,并提前向您表示感谢。