2 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊
您收到此錯(cuò)誤是因?yàn)槟崖暶鳎?/p>
BinarySearchTree<K extends Comparable<K>, V>
當(dāng)您使用NGram
as K 時(shí),預(yù)計(jì)會(huì)實(shí)現(xiàn)Comparable<NGram>
. 由于它沒有實(shí)現(xiàn),因此Comparable<NGram>
您會(huì)收到錯(cuò)誤消息。
編輯
有關(guān)此問題和解決方法的更多詳細(xì)信息:
當(dāng)超類實(shí)現(xiàn)時(shí)Comparable<SuperClass>
,子類不能再次實(shí)現(xiàn)Comparable<SubClass>
。這將意味著子類兩次實(shí)現(xiàn)相同的通用類型。Java不允許。
Comparable<SuperClass>
解決方法是也在子類中實(shí)現(xiàn)。在方法實(shí)現(xiàn)中,檢查子類類型并進(jìn)行處理。最好不要實(shí)現(xiàn) `Comparable 你有一個(gè)類層次結(jié)構(gòu)。相反,使用比較器。
因此,要在當(dāng)前情況下解決您的問題,請(qǐng)聲明BinarySearchTree
以下方式以允許NGram
as K
:
BinarySearchTree<K extends Comparable<? super K>, V>
否則,擺脫Comparable
并改用Comparator
。請(qǐng)注意,如果沒有上述更改,您可以在構(gòu)建時(shí)使用BString
as因?yàn)樗鼘?shí)現(xiàn)了.K
BinarySearchTree
Comparable<BString>

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