Java-访问对象的父对象,涉及泛型?

Nnn*_*Nnn 3 java generics

使用下面的代码,我得到一个编译错误"不兼容的类型 - 找到Tree<T>但预期Tree<T>".知道我对仿制药做错了什么吗?有没有其他方法来访问ParentObjectClass.this以外的对象的父对象?我知道"变通办法",比如向Node类添加一个指向其父对象的变量.此外,我可以传递myInt作为构造函数参数,但我想找到一个更好的解决方案.谢谢你的任何建议.

我在这个网站上遇到了一个类似的问题,但是我尝试了我的代码而无法让它工作:从Java匿名类访问"this".

public class Tree<T> implements TreeIF<T> {
    private int myInt;
    Node<T> root;

    ...

    // a constructor
    public Tree(Node<T> root) {
        this(root.getTree().getMyInt()); // call to different constructor
        this.root = root;
    }

    ...

    // a method
    public int getMyInt() {
        return myInt;
    }

    ...

    // inner class
    class Node<T> {
        T element;

        ...

        Tree<T> getTree() {
            // return Tree.this;     // I tried this too, but it didn't work
            **return Tree<T>.this;** // HERE'S THE COMPILE ERROR
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的建议,乔恩.并且,是的,你是对的,Tree类的T与Node类相同.树实际上包含节点,节点包含元素.Tree类已经知道它使用Node类,因此不需要类型参数.type参数基本上是一个传递.我只是完全摆脱了Tree的类型参数,但是接口(我无法修改)在其几个方法中返回T,所以它需要知道T是什么.我尝试更改为E并编译...我没有得到相同的错误,但是,我在另一部分遇到错误.我必须根除其他错误,然后看看会发生什么.同时,还有什么进一步的建议吗?

Jon*_*eet 5

您已经引入了一个新的类型参数,也称为T.如果您更改了此参数:

class Node<T>
Run Code Online (Sandbox Code Playgroud)

对此:

class Node<E>
Run Code Online (Sandbox Code Playgroud)

错误会更清楚.但是,我怀疑你真的想要这个:

class Node
Run Code Online (Sandbox Code Playgroud)

毕竟,节点的T实际上只是树的T,对吧?换句话说,你想要一个(说)Tree<String>.Node- 拥有一个没有意义Tree<String>.Node<Object>.