在Java中导致编译错误的上界通配符

在Java中导致编译错误的上界通配符,java,bounded-wildcard,Java,Bounded Wildcard,我无法理解为什么会出现这些编译错误: 1: 类型列表中的add(capture#1-of?extends Exec.Bird)方法不适用于参数(Exec.Sparrow) 2: 类型列表中的add(capture#2-of?extends Exec.Bird)方法不适用于参数(Exec.Bird) 静态类Bird{} 静态类Sparrow扩展Bird{} 公共静态void main(字符串[]args){ List您可以像下面这样实例化鸟类列表: List<Bird> birds =

我无法理解为什么会出现这些编译错误:

1:

类型列表中的add(capture#1-of?extends Exec.Bird)方法不适用于参数(Exec.Sparrow)

2:

类型列表中的add(capture#2-of?extends Exec.Bird)方法不适用于参数(Exec.Bird)

静态类Bird{}
静态类Sparrow扩展Bird{}
公共静态void main(字符串[]args){

List您可以像下面这样实例化
鸟类
列表:

List<Bird> birds = new ArrayList<>();
List birds=new ArrayList();
完整代码:

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());
    }
}
import java.util.ArrayList;
导入java.util.List;
公共班机{
静态类Bird{}
静态类Sparrow扩展Bird{}
公共静态void main(字符串[]args){
List birds=new ArrayList();
添加(新麻雀());
添加(新的Bird());
}
}
带有
列表关于#1:带有
列表
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());
    }
}
List<Bird> birds = new ArrayList<>();
List<? super Bird> birds = new ArrayList<>();