首页 > 解决方案 > 列表无法转换为列表

问题描述

为什么这是不允许的?

错误:不兼容的类型:List<TextBook>无法转换为List<Book>

过程(教科书);

import java.util.*;

class Book {}

class TextBook extends Book {}

public class Sample {
    public static void process(List<Book> books) {}

    public static void main(String[] args) {
        List<Book> books = new ArrayList<>();
        process(books);
        System.out.println(“OK”)


        List<TextBook> textBooks = new ArrayList<>();
        process(textBooks); # what is the problem in this statement?
        System.out.println(“OK”);
    }
}

标签: javainheritance

解决方案


您正在尝试将 a 传递给List<TextBook>其签名需要 a 的方法List<Book>。这在编译时会失败,因为如果 Java 编译器允许这样做,那么您的process()方法可能会尝试以错误的方式使用列表的内容。相反,请使用以下版本process()

public static void process(List<? extends Book> books) {}

现在您可以传入 的任何实例Book的任何子类。Book


推荐阅读