关于java:为什么我不能调用一个实现接口的枚举列表的方法?

Why can't I call a method with a list of enum which implement an interface?

我正试图调用一个方法,该方法使用一个枚举列表(实现接口)的接口列表。这会导致以下编译错误:

1
The method method(List<Interface>) in the type Class is not applicable for the arguments (List<Enum>)

这是接口:

1
2
public interface Interface {
}

这是实现接口的枚举:

1
2
public enum Enum implements Interface {
}

这是调用类:

1
2
3
4
5
6
7
8
9
10
11
12
import java.util.ArrayList;
import java.util.List;

public class Class {
    public static void method(List<Interface> list){
    }

    public static void main(String[] args) {
        List <Enum> enumList = new ArrayList<Enum>();
        method(enumList); //This line gives the compile error.
    }
}

为什么有编译错误?在我看来,它应该工作,因为枚举实现了该接口。


1
2
public static void method(List<? extends Interface> list){
}

尽管枚举实现了接口,但list不是list的子类型。如果将方法签名修改为"following",则可以工作。

1
method(List<? extends Interface> list)

有关详细信息,请参阅文档http://download.oracle.com/javase/tutorial/java/generics/通配符.html


这是因为即使是Car扩展VehicleList也不扩展List。如果有,您可以执行以下操作:

1
2
3
4
List<Car> listOfCars = new ArrayList<Car>();
List<Vehicle> listOfVehicles = listOfCars;
listOfVehicles.add(new Bicycle());
// and now the list of cars contains a bicycle: not pretty.


因为List不是List

您应该将变量更改为List,或者将方法签名更改为接受List