使用下面的代码,我得到一个编译错误"不兼容的类型 - 找到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并编译...我没有得到相同的错误,但是,我在另一部分遇到错误.我必须根除其他错误,然后看看会发生什么.同时,还有什么进一步的建议吗?
您已经引入了一个新的类型参数,也称为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>.
| 归档时间: |
|
| 查看次数: |
462 次 |
| 最近记录: |