我正在尝试使用泛型类型创建二叉树,但出现了一个我不明白的错误。我尝试了两种编码方式,第二种有效。我不明白为什么第一个失败了。
我有以下通用代码:
public class MyTreea <T extends Comparable<T>>
{
class BT_Node<T extends Comparable<T>>
{
T value;
BT_Node<T> left;
BT_Node<T> right;
BT_Node(T node_value)
{
this.value = node_value ;
left = null;
right = null;
}
}
区别在于插入过程:这有效:
private BT_Node<T> insert(BT_Node<T> node, BT_Node<T> newNode) {
if ((node.value).compareTo(newNode.value) == 0) { . . . }
但这失败了
private BT_Node insert(BT_Node node, T value) {
if (value.compareTo(node.value) == 0) { . .
和:
MyTreea.java:28: error: method compareTo in interface Comparable<T#2> cannot be applied to given types;
if (value.compareTo(node.value) == 0)
required: T#1
found: Comparable
reason: actual argument Comparable cannot be converted to T#1 by method invocation conversion
where T#1,T#2 are type-variables:
T#1 extends Comparable<T#1> declared in class MyTreea
T#2 extends Object declared in interface Comparable
显然,如果我用两个节点参数调用 BT_insert 就可以了。(我通过创建一个额外的函数来编写代码来满足这一点)但我不希望这样。
谢谢