[英]extending a class AND comparable in a generic java data structure
對於家庭作業,我被分配制作一個 AVL 樹數據結構。 我正在嘗試使我的“添加”方法將一條通用數據添加到樹中。 我的問題是,在作業中,我們必須擴展一個 class,它被稱為“BinaryTree”。 在我的 add 方法中,我需要使用 compareTo 方法,我相信這意味着我還必須擴展 Comparable。 我在網上看過,顯然你不能擴展兩個類,所以這成了一個問題。 我決定嘗試在我的 AVL 樹 class 中編寫自己的 compareTo 方法,但它說 < 和 > 不能應用於我的泛型類型。 任何提示或快速解決方法? 還是我只是愚蠢?
謝謝 - 史蒂夫
Java 不支持多個 inheritance。 但是,您不需要擴展Comparable,您需要實現Comparable。 Comparable是一個接口。 您不擴展接口,而是實現它。
希望這可以幫助。
下面的一個例子: -
public final class AVL implements Comparable<SomeObject> extends BinaryTree
您可以使用 Generics 來指定類型並要求它實現 Comparable。 這樣您就可以訪問 AVL 樹中的 type 和 compareTo()。
public class AVL<T extends Comparable<T>> extends BinaryTree {
public void add(T object) {
...
object.compareTo(some other object)
...
}
}
然后您將其創建為AVL<MyObject> avl = new AVL<MyObject>()
首先, java.lang.Comparable
是一個接口,不是一個class。 Java 只允許你擴展一個 class,但是你可以實現任意數量的接口,所以這樣做是完全有效的:
public class MyTreeImpl extends BinaryTree implements Comparable<MyTreeImpl> {
@Override
public int compareTo(MyTreeImpl o) {
// your compare implementation
}
// the rest of your class definition
}
為了解決 generics 的問題,我想我需要查看您的代碼以及編譯器給您的確切錯誤。
您通常希望將樹中的鍵相互比較,而不是一棵樹與另一棵樹或一個鍵進行比較。
因此,您的鍵對象應該實現Comparable
或更好的Comparable<K>
,其中K
是鍵的某種超類型。
這通常意味着您將 AVLTree class 聲明為通用:
class AVLTree<K extends Comparable<? super K>, V> extends BinaryTree {
...
}
我不太了解與您的 BinaryTree class 的關系,抱歉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.