亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

BinaryTree 期望 Comparable,另一個實現 Comparable 的子類不起作用

BinaryTree 期望 Comparable,另一個實現 Comparable 的子類不起作用

陪伴而非守候 2023-05-10 13:19:23
我有一個通用抽象類 ,BString它期望其類型之一實現Comparable. 另一個類NGramextends作為可比類型BString傳遞。String最后一堂課,BinarySearchTree需要擴展的鍵Comparable。為什么我無法創建一個BinarySearchTreewithNGram作為鍵類型?我在下面包含了類聲明,請注意雖然BString覆蓋了compareTo,NGram但沒有。當我實際創建 時BinarySearchTree,如代碼的最后一行所示,我收到以下消息:綁定不匹配:類型NGram不是<K extends Comparable<K>>類型的綁定參數的有效替代BinarySearchTree<K,V>下面是代碼。public abstract class BString<Alphabet extends Comparable<Alphabet>> implements Iterable<Alphabet>, Comparable<BString<Alphabet>> {protected FixedSizeFIFOWorkList<Alphabet> str;}public BString(Alphabet[] str) {    this.str = new CircularArrayFIFOQueue<Alphabet>(str.length);    for (int i = 0; i < str.length; i++) {        this.str.add(str[i]);    }}public class NGram extends BString<String> {    public NGram(String[] str) {        super(str);    }}public class BinarySearchTree<K extends Comparable<K>, V>    extends ComparableDictionary<K, V> {    // The root of the BST. Root is null if and only if the tree is empty.    protected BSTNode root;    /**     * Create an empty binary search tree.     */    public BinarySearchTree() {        super();        this.root = null;    }}new BinarySearchTree<NGram,Dictionary<AlphabeticString, Integer>>()
查看完整描述

2 回答

?
慕婉清6462132

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>


查看完整回答
反對 回復 2023-05-10
?
幕布斯7119047

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也可能需要放松。


查看完整回答
反對 回復 2023-05-10
  • 2 回答
  • 0 關注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號