2 回答

TA貢獻1804條經驗 獲得超2個贊
您收到此錯誤是因為您已聲明:
BinarySearchTree<K extends Comparable<K>, V>
當您使用NGram
as K 時,預計會實現Comparable<NGram>
. 由于它沒有實現,因此Comparable<NGram>
您會收到錯誤消息。
編輯
有關此問題和解決方法的更多詳細信息:
當超類實現時Comparable<SuperClass>
,子類不能再次實現Comparable<SubClass>
。這將意味著子類兩次實現相同的通用類型。Java不允許。
Comparable<SuperClass>
解決方法是也在子類中實現。在方法實現中,檢查子類類型并進行處理。最好不要實現 `Comparable 你有一個類層次結構。相反,使用比較器。
因此,要在當前情況下解決您的問題,請聲明BinarySearchTree
以下方式以允許NGram
as K
:
BinarySearchTree<K extends Comparable<? super K>, V>
否則,擺脫Comparable
并改用Comparator
。請注意,如果沒有上述更改,您可以在構建時使用BString
as因為它實現了.K
BinarySearchTree
Comparable<BString>

TA貢獻1794條經驗 獲得超8個贊
您的類NGram
實現Comparable<BString<Alphabet>>
(繼承自BString
)。為了滿足 的BinarySearchTree
類型參數的邊界要求K
,它需要實現Comparable<NGram>
,而不是。后者不是前者的子類型。
本質問題是 的BinarySearchTree
要求過于嚴格。為了比較兩個NGram
s,它不需要那個類專門與它自己進行比較。它足以與它自己的任何超類相媲美。準確地說,這個概念可以這樣表達:
public class BinarySearchTree<K extends Comparable<? super K>, V> extends ComparableDictionary<K, V> // ...
當然,這ComparableDictionary
也可能需要放松。
添加回答
舉報