java - 为什么我不能将 List<Truck> 用作 Iterable<Vehicle>?

标签 java iterator iterable

嗨,我有这个错误:

incompatibles types: List<Car> cannot be converted to Iterable<Iterator>

incompatibles types: List<Truck> cannot be converted to Iterable<Iterator>

Car 类扩展了 Vehicle 类。卡车还扩展了车辆。我必须创建可迭代的 Vehicle 类??

public static void print(Iterable<Vehicle> it){
    for(Vehicle v: it) System.out.println(v);
}

public static void main(String[] args) { 
    List<Car> lcotxe = new LinkedList<Car>();
    List<Truck> lcamio = new LinkedList<Truck>();

    print(lcotxe);//ERROR
    print(lcamio);//ERROR


}

最佳答案

这无法编译,因为 List<Car>不是 Iterable<Vehicle> 的子类型.

然而,它是 Iterable<? extends Vehicle> 的子类型。这称为covariance .

public static void print(Iterable<? extends Vehicle> it){
    for(Vehicle v: it) System.out.println(v);
}

您还可以选择使该方法通用。

public static <A extends Vehicle> void print(Iterable<A> it){
    for(Vehicle v: it) System.out.println(v);
}

关于java - 为什么我不能将 List<Truck> 用作 Iterable<Vehicle>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37377616/

相关文章:

java - 使用类似的 Java 接口(interface)

java - 在迭代 hashmap 时执行循环展开

java while (LinkedList.iterator().hasNext()) 不起作用

c++ - 模板 std::map::iterator 实例化

python - 使用字符串元组更新 Python 字典以设置(键,值)失败

java - 使用 Spring Boot 进行 ANSI 日志记录

java - 如何检查 Jar 文件之间的依赖关系?

java - 查询失败,错误代码为 13,服务器本地主机 :27017 上的错误消息为 'command find requires authentication'

typescript - 如何从异步迭代器产生一系列 promise ?

list - 为什么我可以在必须为可迭代对象的地方添加列表作为参数?