假设我有一个实现接口的类:
public class A implements IB
我有一个List<A>我想提到的:List<? implements IB> list.所以我可以编码:for (IB item : list)等
可以在Java中以某种方式完成吗?没有<? implements ...>可能.我错过了什么?
coo*_*ird 20
用途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);
}
更多信息可以在The Java Tutorials上找到,它有一个关于泛型的综合课程.
特别是,关于通配符的部分解释了如何使用?with super和extends指定一个参数,该参数是给定类的超类或子类.
如果您的意思是 A 类实现 IA,而不是 IB,那么您的代码应该可以这样说
for (A item : list) {
    // handle item as if it is an IA
}
因为根据定义,所有 A 都是 IA。
同时,没有通配符<? implements C>。有<? extends C>, 且C可以是接口或类;但是,这对于您似乎正在尝试做的事情来说并不是必需的。
如果你想明确地说for (IA item : list)因为你不保证该列表中的项目是As,但保证它们是IAs,那么我认为你有一个小问题(我不能肯定地说,因为你没有说出此列表处理代码所在的位置)。根据定义,A不是List<A>a ;如果您正在构建 a然后将其传递给需要 a 的方法,您将收到编译时错误。但是,您可以创建 a并用 s 填充它。Java 的泛型教程中解释了其原因。List<IA>List<A>List<IA>List<IA>A