java - java中的下界泛型即使在传递超类时也不会编译
问题描述
List<? super IOException>
表示列表可以包含IOException
对象或任何属于.super
类的对象IOException
。那么为什么下面的第 2 行不能编译呢?
在第 3 行FileNotFoundException
中也不super
是IOException
. 那为什么会编译呢?
List<? super IOException> myList = new ArrayList<Exception>();
myList.add(new Exception()); //Line 2 This line do not compile
myList.add(new FileNotFoundException()); //Line 3 This compiles
解决方案
通配符下限指定类型参数的下限,而不是可接受的List
. type 参数可以像 一样具体IOException
,但也可以像我们能得到的那样通用:Object
.
添加 时Exception
,项目的类型作为项目过于笼统,因为类型参数可能对它来说过于具体——它可能是IOException
. 编译器不允许您将 an 添加Exception
到可能只需要IOException
s 的内容中,因此它会生成错误。
不会发生这种情况FileNotFoundException
,因为无论类型参数多么具体,它都不会比IOException
(下限)更具体,因此作为FileNotFoundException
的子类的 aIOException
在所有情况下都是合法的,因此编译器允许它。
推荐阅读
- java - 在 Java 中求和两个巨大的长
- c - 是否可以使用 fgets 或 gets_s 正确读取空字符?
- google-cloud-firestore - 什么是“Cloud Firestore 索引写入操作”?
- python-3.x - 如何在python3中显示图像
- excel - 以编程方式向 Power Query 使用的 DSN 连接提供凭据
- java - 使用 Java 关闭 iOS 键盘
- c++ - 从 constexpr 干净地报告编译时错误,没有例外?
- javascript - Three.js 从 mouseMove 变为随机移动
- appium - iOS sims 挂断会话初始化
- swift - 将旧版 KVO 转换为 Swift 4