2 回答
TA貢獻1804條經驗 獲得超2個贊
您收到此錯誤是因為您已聲明:
BinarySearchTree<K extends Comparable<K>, V>
當您使用NGramas K 時,預計會實現Comparable<NGram>. 由于它沒有實現,因此Comparable<NGram>您會收到錯誤消息。
編輯
有關此問題和解決方法的更多詳細信息:
當超類實現時Comparable<SuperClass>,子類不能再次實現Comparable<SubClass>。這將意味著子類兩次實現相同的通用類型。Java不允許。
Comparable<SuperClass>解決方法是也在子類中實現。在方法實現中,檢查子類類型并進行處理。最好不要實現 `Comparable 你有一個類層次結構。相反,使用比較器。
因此,要在當前情況下解決您的問題,請聲明BinarySearchTree以下方式以允許NGramas K:
BinarySearchTree<K extends Comparable<? super K>, V>
否則,擺脫Comparable并改用Comparator。請注意,如果沒有上述更改,您可以在構建時使用BStringas因為它實現了.KBinarySearchTreeComparable<BString>
TA貢獻1794條經驗 獲得超8個贊
您的類NGram實現Comparable<BString<Alphabet>>(繼承自BString)。為了滿足 的BinarySearchTree類型參數的邊界要求K,它需要實現Comparable<NGram>,而不是。后者不是前者的子類型。
本質問題是 的BinarySearchTree要求過于嚴格。為了比較兩個NGrams,它不需要那個類專門與它自己進行比較。它足以與它自己的任何超類相媲美。準確地說,這個概念可以這樣表達:
public class BinarySearchTree<K extends Comparable<? super K>, V> extends ComparableDictionary<K, V> // ...
當然,這ComparableDictionary也可能需要放松。
添加回答
舉報
