Java 类型不匹配:无法转换MyClass<;E>;给我的班级<;E>;

Java 类型不匹配:无法转换MyClass<;E>;给我的班级<;E>;,java,generics,inner-classes,Java,Generics,Inner Classes,关于泛型和/或内部类,我缺少一些东西。我想用一个专门的迭代器编写一个专门的树类。FooTree类如何拥有一个迭代器来返回FooTree类型的连续节点而不是V类型的节点值?课程开始: public class FooTree<V> private final V value; private FooTree<V> left; private FooTree<V> right; private class PreorderIterator<

关于泛型和/或内部类,我缺少一些东西。我想用一个专门的迭代器编写一个专门的树类。FooTree类如何拥有一个迭代器来返回FooTree类型的连续节点而不是V类型的节点值?课程开始:

public class FooTree<V>
   private final V value;
   private FooTree<V> left;
   private FooTree<V> right;
private class PreorderIterator<V> implements Iterator<V> {
   private FooTree<V> current;  
   . . .
   public FooTree<V> nextNode() {
      current = FooTree.this;                        **
public类FooTree
私人最终V值;
列兵FooTree左;
私权;
我使迭代器类成为一个内部类,因为没有其他人会关心它。FooTree中定义的获取迭代器的工厂方法是:

public Iterator<FooTree<V>> preorderIterator() {
    return this.new PreorderIterator<FooTree<V>>;
}
公共迭代器预排序器(){
返回此。新的预订购器;
}
由于next()必须返回一个V,正如在接口中声明的那样,因此我添加了nextNode()来绕过返回类型。内部类开始:

public class FooTree<V>
   private final V value;
   private FooTree<V> left;
   private FooTree<V> right;
private class PreorderIterator<V> implements Iterator<V> {
   private FooTree<V> current;  
   . . .
   public FooTree<V> nextNode() {
      current = FooTree.this;                        **
私有类预排序器实现迭代器{
私人山脚流;
. . .
公共FooTree nextNode(){
电流=FooTree.this**
我发现了一个很好的编译器错误:
类型不匹配:无法从…FooTree转换为…FooTree
(两者都是相同的包)
嗯,哇!?
我可以通过添加cast来编译它:current=(FooTree)FooTree.this; 但我为什么要这么做呢? 它是否试图“聪明”并且计算出第一个V可能与第二个V不同


做这件事的正确方法是什么?

试着做出声明:

private class PreorderIterator implements Iterator<V>
私有类预排序器实现迭代器
内部类中的
是不必要的,在这种情况下是没有帮助的


实际发生的情况是,
preordereditor
中的
是“阴影”来自外部类的
,因此,尽管它们看起来像是同一类型的参数,但实际上它们是不同的参数,恰好具有相同的名称。

谢谢!一旦我放弃了内部类也需要显式参数化的先入之见,我在探索时得到的所有错误和提示都会陷入地点。