所有实现接口的对象的java列表

所有实现接口的对象的java列表,java,generics,Java,Generics,假设我有一个实现接口的类: public class A implements IB 我有一个列表,我想引用它:列表你可以把它声明为列表 为了进一步建立这个基础,列表可以存储在其中实现IA的任何对象。问题是,在检索它们时,如果不对原始类执行.getClass(),就无法知道原始类 例如: List<IA> list = new ArrayList<IA>(); // code to populate list here for (IA item : list) {

假设我有一个实现接口的类:

public class A implements IB

我有一个
列表
,我想引用它:
列表你可以把它声明为
列表

为了进一步建立这个基础,列表可以存储在其中实现IA的任何对象。问题是,在检索它们时,如果不对原始类执行
.getClass()
,就无法知道原始类

例如:

List<IA> list = new ArrayList<IA>();
// code to populate list here
for (IA item : list) {
    item.iaMethod();
}
List List=new ArrayList();
//在此填充列表的代码
对于(IA项目:列表){
item.iaMethod();
}

使用
扩展

public void someMethod(List<? extends IB> list) {
  for (IB e : list) {
    // Perform some processing on each element.
  }
}

public void anotherMethod() {
  List<A> list = new ArrayList<A>();
  someMethod(list);
}
List<? extends IA> list
public void somethod(列表关于:

List<? extends IA> list;

List您可以使用
extends

public void someMethod(List<? extends IB> list) {
  for (IB e : list) {
    // Perform some processing on each element.
  }
}

public void anotherMethod() {
  List<A> list = new ArrayList<A>();
  someMethod(list);
}
List<? extends IA> list

List如果您的意思是类A实现IA,而不是IB,那么您的代码应该可以这么说

for (A item : list) {
    // handle item as if it is an IA
}
因为根据定义,一切照旧


同时,
没有通配符,这是一个不需要使用
列表的替代方案。你说的是IA吗?当你说IB时?我还推荐今年JavaOne的Joshua Bloch提供的课程,以获取更多信息。我真的澄清了这一点:我在想什么?它工作得非常好,因为在>中,Java的导师解释了这一点的原因关于泛型的ial。以下是相关部分的链接: