gpt4 book ai didi

java - 上界通配符(扩展)不起作用;数组列表 不允许子类型的实例

转载 作者:搜寻专家 更新时间:2023-11-01 03:36:48 25 4
gpt4 key购买 nike

<分区>

据我所知,有界通配符是 <? extends Object> 的类型参数将接受属于 Object 子类型的所有类型.正如 Java 教程所述:

The upper bounded wildcard, <? extends Foo>, where Foo is any type, matches Foo and any subtype of Foo

所以如果我有类型 GridPosition , 它扩展了 Position , ? extends Position应该接受类型 GridPosition .

问题

尝试添加 GridPosition extends Position 的实例时以 ArrayList<? extends Position> 类型声明的列表,我得到一个错误:

The method add(capture#1-of ? extends Position) in the type ArrayList<capture#1-of ? extends Position> is not applicable for the arguments (GridPosition)

我指的是最简单形式的代码:

import java.util.ArrayList;

public class Main {
public static void main(String[] args) {
ArrayList<? extends Position> list = new ArrayList<>();
list.add(new GridPosition()); // Error on this line
}
}

class Position {}
class GridPosition extends Position {}

Eclipse Luna 中错误的图片运行 Java 8u31 :

enter image description here

这是一个错误吗?还是我不理解有界通配符?


我注意到 ? super Position允许我添加 GridPosition 的实例到列表中。

使用类型参数为 <? extends Position> 的列表时,没有实例(来自下面的类)工作:

class Super {}
class Position extends Super {}
class GridPosition extends Position {}

图片:

enter image description here

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com