关于泛型和/或内部类,我缺少一些东西。我想用一个专门的迭代器编写一个专门的树类。FooTree 类如何具有返回 FooTree 类型的连续节点而不是 V 类型的节点值的迭代器?课程开始:
public class FooTree<V>
private final V value;
private FooTree<V> left;
private FooTree<V> right;
我将 Iterator 类设为内部类,因为没有人会关心它。FooTree 中定义的获取迭代器的工厂方法是:
public Iterator<FooTree<V>> preorderIterator() {
return this.new PreorderIterator<FooTree<V>>;
}
由于 next() 必须返回一个 V,正如接口中声明的那样,我添加了 nextNode() 来绕过返回类型。内部类开始:
private class PreorderIterator<V> implements Iterator<V> {
private FooTree<V> current;
. . .
public FooTree<V> nextNode() {
current = FooTree.this; **
我得到了这个美妙的编译器错误:(
Type mismatch: cannot convert from ...FooTree<V> to ...FooTree<V>
两者都是同一个包)
Eh wot!?
我可以通过添加一个演员来编译它: current = (FooTree)FooTree.this; 但为什么我必须首先这样做?它是否试图变得“聪明”并认为第一个 V 可能与第二个 V 不同?
这样做的正确方法是什么?