java - <?扩展 > Java 语法

标签 java generics

这段代码:

List<? extends Reader> weirdList;
weirdList.add(new BufferedReader(null));

编译错误为

The method add(capture#1-of ? extends Reader) in the type List is not applicable for the arguments (BufferedReader)

为什么? BufferedReader 扩展了阅读器,那为什么不“匹配”呢?

最佳答案

List<? extends Reader> weirdList可以引用任何类型的 List存储任何类型的 Reader .所以有可能

List<? extends Reader> weirdList1 = new ArrayList<BufferedReader>();
List<? extends Reader> weirdList2 = new ArrayList<FileReader>();

如果 Java 允许您添加 BufferedReaderweirdList1它还必须让您添加 BufferedReaderweirdList2 (引用类型相同)自 weirdList2 以来不应该发生应该只存储 FileReader

关于java - <?扩展 > Java 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15775464/

相关文章:

JAVA:如何使用 JMenuItem 和 Jbutton 上的监听器来计算费率

java - 如何从另一个类的构建器中引用枚举字段?

generics - 异常类型可以是通用的吗?

java - Jbehave:我可以获得一个运行 Jbehave 的示例,对此我有几个问题。

c# - 为什么 C# 中的这种隐式类型转换会失败?

ios - 泛型类类型不符合 Any

scala - 以方法为上限的泛型不能将泛型类型作为参数

java - 如何使用 pdfbox 2.0.0 检测扫描文档中的 OCR?

java - 从txt文件读取数据,创建对象,添加到集合

java - Java 静态修饰符对运行时性能有积极影响吗?