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

标签 java generics

使用下面的代码,我得到一个编译错误“Incompatible types - found Tree<T> but expected Tree<T>”。知道我对泛型做错了什么吗?除了 ParentObjectClass.this 以外,还有其他方法可以访问对象的父对象吗?我知道“解决方法”,比如向指向其父对象的 Node 类添加一个变量。此外,我可以将 myInt 作为构造函数参数传递,但我想找到一个更好的解决方案。感谢您的任何建议。

我在这个网站上遇到了一个类似的问题,但我对我的代码进行了尝试,但无法让它工作:Access "this" from Java anonymous class .

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
        }
    }
}

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

最佳答案

您引入了一个新的类型参数,也称为 T。如果您更改它:

class Node<T>

为此:

class Node<E>

错误会更清楚。但是,我怀疑您实际上想要这个:

class Node

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

关于Java - 访问对象的父对象,涉及泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6061894/

相关文章:

java - 为什么这个嵌套的 for 循环会无限循环(java)?

java - 创建 Maven 原型(prototype)

java - Map 中 Set 的通配符 - 返回类型不兼容 - 为什么?

java - 'list of cherry cokes' 是 'list of cokes' 吗?

c# - 在类属性中使用泛型类型的名称

java - 整理 XMPP

java - 试图将一堆 C++ 代码转换为 Java - if 语句

java - Android 应用程序发布日志错误

java - 为什么 <T extends Enum<T> & SomeInterface> 编译,而不是 <T extends SomeInterface & Enum<T>>?

java - 奇怪的 "template-like"语法(泛型?)