List<? extends Number> x6 = new ArrayList<Object> (); 编译会出错吗
时间: 2023-06-03 07:04:11 浏览: 44
?不会出错。这是一个使用了上限通配符的泛型声明语句,意思是 x6 是一个可以存储 Number 类型及其子类类型的 List。在这里,Object 类型也是 Number 类型的子类,所以编译不会出错。
相关问题
List<? extends Number> x5 = new ArrayList<Integer> ();编译会出错吗
不会。这是Java中的泛型,可以将一个 Integer 类型的 ArrayList 赋值给一个 List<? extends Number> 类型的变量。这是因为 Integer 类型是 Number 类型的一个子类。
List<? extends Father> list2 = new ArrayList<>(); 要怎么赋值
List<? extends Father> list2 = new ArrayList<>();
这里的通配符表示这个 List 中的元素可以是 Father 或 Father 的子类,但具体哪个子类是不确定的。
要赋值,可以通过以下方式:
1. 直接将一个已经存在的 List 赋值给 list2:
```
List<Son> sonList = new ArrayList<>();
list2 = sonList; // 此时 list2 中的元素类型将被确定为 Son,因为 sonList 中的元素类型是 Son
```
2. 创建一个新的 List,并将其赋值给 list2:
```
List<Son> sonList = new ArrayList<>();
List<? extends Father> newList = new ArrayList<>(sonList);
list2 = newList; // 此时 list2 中的元素类型将被确定为 Son,因为 newList 中的元素类型是 Son
```
需要注意的是,由于 list2 中的元素类型是不确定的,因此不能直接向其中添加元素,否则会出现编译错误。如果需要添加元素,可以使用 List<? super Son>,这样可以保证 List 中的元素类型是 Son 或者 Son 的父类。