我正在尝试使用树结构进行课程学习。在其中一个方法中,我遍历树并根据某个参数返回某个节点的值。但是,由于某些原因,Java编译器抱怨我在这个方法上的返回类型,我不明白它为什么会这样做。
基本上,当我使用以下代码时,程序编译得很好:
public class BinNode<E extends Comparable<?super E>> {
private E value;
private BinNode left;
private BinNode right;
private int size;
public BinNode(E e) {
value = e;
left = right = null;
size = 1;
}
public E example(int k) {
return value;
}
public E getValue() {
return value;
}
}
但是如果我更改示例方法以返回左或右节点的值而不是当前节点,则会出现编译错误。如,代码:
public class BinNode<E extends Comparable<?super E>> {
private E value;
private BinNode left;
private BinNode right;
private int size;
public BinNode(E e) {
value = e;
left = right = null;
size = 1;
}
public E example(int k) {
return left.getValue();
}
public E getValue() {
return value;
}
}
给了我这个错误:
BinNode.java:13: error: incompatible types: Comparable cannot be converted to E
return left.getValue();
^
where E is a type-variable:
E extends Comparable<? super E> declared in class BinNode
老实说,我不知道为什么会发生这种情况,并希望能够深入了解正在发生的事情以及如何解决错误。