- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
使用下面的代码,我得到一个编译错误“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/
我是一名优秀的程序员,十分优秀!