首页 > 解决方案 > Java 泛型扩展和超级

问题描述

当我编写以下代码时出现错误,


List<? extends Number> myList = new ArrayList<>();
myList.add(2);
myList.add(10);

我知道为什么会出错,因为?表示任何扩展 Number 的类,它可以是 Integer、Double 等,所以因为类型未指定,所以我无法在此列表中添加任何内容。我的问题是列表中不能包含项目的用例是什么?我唯一能想到的是在定义时是这样的:


public List<? extends Number> testMethod()
{
    var x = new ArrayList<Integer>();
    x.add(2);
    x.add(5);
    return x;
}

那是唯一的用例吗?

我的第二个问题是两个片段之间有什么区别?

List<? super Number> myList = new ArrayList<>();
myList.add(2);
myList.add(5L);
myList.add(5.5d);
myList.add(3.2f);
System.out.println(myList);

List<Number> myList = new ArrayList<>();
myList.add(2);
myList.add(5L);
myList.add(5.5d);
myList.add(3.2f);
System.out.println(myList);

标签: javalistgenerics

解决方案


推荐阅读