“?扩展A”表示“源自A的某种类型(或A本身)”。因此,例如,a
List<ByteArrayOutputStream>与
List<? extendsOutputStream>- 兼容,但您不应该将a添加
FileOutputStream到这样的列表中-
它本来就是一个
List<ByteArrayOutputStream>!您所知道的是, 从 列表中获取的任何内容
OutputStream都是某种。
“?super A”表示“是A(或A本身)的超类的某种类型”。例如,a
List<OutputStream>与兼容
List<? superByteArrayOutputStream>。您绝对可以
ByteArrayOutputStream在这样的列表中添加一个-
但是,如果您从列表中获取一个项目,那么您就不能真正保证它。
有关更多信息,请参见Angelika
Langer的泛型常见问题解答。



