我想創建一個使用泛型打字的二叉樹,我有一個錯誤,我不明白。我嘗試了兩種編碼方式,第二種方式工作。我不明白爲什麼第一次失敗。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