我一直面临着一个我不太了解的奇怪现象。我有一个由其他几个类扩展的抽象类。抽象类是一种特殊的集合,它有一个适合它的嵌套抽象迭代器类。每个扩展抽象集合类的类,也都有一个嵌套迭代器类,它扩展了原始抽象迭代器。
抽象类是这样的:
public abstract class AbstractMultiCollection<T> {
public AbstractMultiCollection() {
...
}
MultiIterator<T> iterator();
public abstract class AbstractMultiIterator {
public AbstractMultiIterator() {
...
}
扩展类是这样的:
public class MajorityMultiCollection<T> extends AbstractMultiCollection<T> {
...
public MultiIterator<T> iterator() {
return new MajorityIterator();
}
...
public class MajorityIterator extends AbstractMultiIterator {
public MajorityIterator() {
super();
...
}
public T next() {
...
}
简单地说,集合扩展了抽象集合,它们的嵌套迭代器扩展了嵌套的抽象迭代器。
我有两个我不明白的问题,希望得到澄清:
- 当我调试我的代码时,“return new MajorityIterator();” 行在 Eclipse 调试器中引发“未找到源”错误和“ClassNotFound”异常以及我不理解的一堆“ClassLoaderExt”异常。
- 我注意到每个“MajorityIterator”都有两个“This$0”字段,包含他所属的集合。一开始是空的,但是一旦我调用“super();”就会收到集合 建设者。
我没找到原因,谁能解释一下?提前致谢!