我想创建一个使用泛型打字的二叉树,我有一个错误,我不明白。我尝试了两种编码方式,第二种方式工作。我不明白为什么第一次失败。Java - 泛型类型
我有以下共同代码:
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具有两个节点的参数是那朵罚款。 (并且我通过创建一个额外的函数来满足这个需求),但我宁愿不这样做。
谢谢
你可能发布完整的文件,包括命名空间和Comparable类吗? – likeitlikeit 2013-04-25 08:59:52