java泛型和继承问题

标签 java generics

我有一个如下定义的列表:

 List<MyBean> beanList = getList();

getList()返回类型 List<MyBean> .

现在,我想将结果传递给接收 List<Idisplayable> 的方法 和MyBean是否实现了Idisplayable

这会导致编译器错误。

现在迭代 beanList 是愚蠢的只是将其转换到 Idisplayable 。有什么建议吗?

最佳答案

如果采用 List<IDisplayable> 的方法不想向列表中添加任何内容,那么它应该接受 List<? extends IDisplayable>,以完全允许您尝试执行的操作。

基本问题是 List<MyBean> List<IDisplayable> 不同(甚至赋值兼容)。

List<IDisplayable> promise 两件事:它只会返回 IDisplayable 对象,并且它将接受(通过 add() )所有 IDisplayable 对象。

A List<MyBean> 也只返回 IDisplayable ,但它不会接受任何不是 IDisplayableMyBean (例如, AnotherDisplayable )。

因此,如果一个方法仅迭代列表的内容(实际上是只读的)或仅执行一组有限的操作(删除对象很好,就像添加 null 一样),那么它应该接受 List<? extends IDisplayable> 。该语法意味着“我接受任何只会返回 List 对象的 IDisplayable,但我不关心具体类型”。

关于java泛型和继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5549222/

相关文章:

delphi - 通用接口(interface)如何引用指向其类型参数的指针?

java - Android (Java) GregorianCalendar 奇怪的行为

java - 为什么 ConcurrentHashMap.Segment 和 ConcurrentHashMap.HashEntry 类是静态的?

java - 使用用户输入在命令行中运行java项目

java - 如何通过java socket编程开发客户端-服务器订座程序?

java - 在Java中使用泛型实现一个接受int和double并返回sum的列表

java - 调用此方法时如何放置 gnerics?

java - java中这个有效的泛型方法如何?

java - 线程中出现异常 "main"java.lang.IndexOutOfBoundsException

java - 缺少 Artifact org.hibernate :hibernate:pom:3. 3.2.GA