您可以实现一个新的类(可以是匿名的)实现Iterable
接口,该接口将返回您负责迭代的迭代器listOfClassesA
or listOfClassesB
。但是,在您的迭代器的定义中,您只能使用类A
和B
通用超类型。
这就是我的想法:
interface I { }
class A implements I { }
class B implements I { }
class MyIterator implements Iterable<I> {
private List<I> list;
public MyIterator(boolean test, List<A> listOfClassesA, List<B> listOfClassesB) {
super();
this.list = new ArrayList<I>(test ? listOfClassesA : listOfClassesB);
}
@Override
public Iterator<I> iterator() {
return list.iterator();
}
}
public class Test {
public static void main(String[] args) throws Exception {
List<A> listOfClassesA = new ArrayList<A>();
List<B> listOfClassesB = new ArrayList<B>();
for(I elm : new MyIterator(true, listOfClassesA, listOfClassesB)) {
// elm is of I type
}
}
}