Upper bounded wildcards causing compilation error in Java
我不明白为什么会出现这些编译错误:
1:
The method add(capture#1-of ? extends Exec.Bird) in the type List is not applicable for the arguments (Exec.Sparrow)
号
2:
The method add(capture#2-of ? extends Exec.Bird) in the type List is not applicable for the arguments (Exec.Bird)
号
1 2 3 4 5 6 7 8 | static class Bird{} static class Sparrow extends Bird{} public static void main(String[] args){ List<? extends Bird> birds = new ArrayList<Bird>(); birds.add(new Sparrow()); //#1 DOES NOT COMPILE birds.add(new Bird());// //#2 DOES NOT COMPILE } |
对于
这意味着
为了使事情顺利进行,您只需将列表的声明更改为:
1 | List<Bird> birds = new ArrayList<>(); |
或使用下限:
1 | List<? super Bird> birds = new ArrayList<>(); |
。
关于这个下界示例:声明实际上表示任何类型的
一般来说,你在写清单的时候应该使用
这个答案提供了非常有用的关于泛型的信息。你绝对应该读。
您可以这样实例化
1 | List<Bird> birds = new ArrayList<>(); |
完整代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 | import java.util.ArrayList; import java.util.List; public class Main { static class Bird{} static class Sparrow extends Bird{} public static void main(String[] args) { List<Bird> birds = new ArrayList<>(); birds.add(new Sparrow()); birds.add(new Bird()); } } |
号