java - 列表无法转换为列表
问题描述
为什么这是不允许的?
错误:不兼容的类型:
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”);
}
}
解决方案
您正在尝试将 a 传递给List<TextBook>
其签名需要 a 的方法List<Book>
。这在编译时会失败,因为如果 Java 编译器允许这样做,那么您的process()
方法可能会尝试以错误的方式使用列表的内容。相反,请使用以下版本process()
:
public static void process(List<? extends Book> books) {}
现在您可以传入 的任何实例或Book
的任何子类。Book
推荐阅读
- sql - 需要删除 sql 输出文件中的尾随 .000
- node.js - Node.js 链接承诺,但仍然乱序执行
- r - 从 rvest_session 对象获取非 html 内容
- java - 怎么做
取决于微调器选定项目的位置 - mongodb - 带有 Socket.io 问题的实时天才聊天
- r - 如何识别所有行的至少一列中的值的 ID?
- java - 带有 Ajax 功能的 Spring Boot 错误“不支持请求方法'POST'”
- c++ - 递增 std::string::end() 迭代器是否未定义?
- c - 有没有更好的方法来检查这两个变量而不是四个 ifs?
- vb.net - 从 radiobuttonlist vb.net 更改样式并添加标签