所有实现接口的对象的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。以下是相关部分的链接: