我正在使用本讨论中的成语How can I make an interface instance method accept arguments of the same class only, really?:
interface ITree<SELF extends ITree<SELF>>{
SELF getNode(int index);
void setNode(int index, SELF node);
}
我的问题是,如何实现扩展ITree的树,为什么?我目前的代码如下:
public class B {
private ITree tree;
public B (ITree tree){
this.tree = tree;
}
}
正如预期的那样,它会抛出警告,我应该添加一个Type。我想让使用B的类决定它应该使用哪种类型。或者更好我根本不想使用泛型来解决这个小问题。
编辑:
我在评估答案后找到了解决方案。魔鬼细节就在这一行:
<T extends ITree<T>>
以下是完整的源代码:
public class B<T extends ITree<T>> {
private T tree;
public B (T tree){
this.tree = tree;
}
}
答案 0 :(得分:2)
public class B<T extends ITree> {
private T tree;
public B (T tree){
this.tree = tree;
}
}