gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:56:31 25 4
gpt4 key购买 nike

使用下面的代码,我得到一个编译错误“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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com