簡體   English   中英

Java Generics - 綁定不匹配:類型 Object 不是綁定參數的有效替代品<e extends comparable<e> &gt;</e>

[英]Java Generics - Bound mismatch: The type Object is not a valid substitute for the bounded parameter <E extends Comparable<E>>

我正在嘗試制作通用二叉樹,並且二叉樹的節點將由對象組成。 為了插入和移動二叉樹,我使用 Comparable 接口,但問題是我無法創建二叉樹 Object 並制作“對象”類型的 Generics。

二叉樹:

public class BinTreeGen<E extends Comparable<E>> implements BinTreeGenInterface<E> {
    private BinNodeGen<E> root = null;

    BinTreeGen() {
        root = null;
    }

    BinTreeGen(BinNodeGen<E> root) {
        this.root = root;
    }
}

主要class:

public class Main {
    public static void main(String[] args) {
        BinTreeGen<Object> btg = new BinTreeGen<>(); //Bound mismatch: The type Object is not a valid substitute for the bounded parameter <E extends Comparable<E>> of the type
    }
}

解決這個問題的正確方法是什么? 我應該在沒有 Comparable 的情況下創建二叉樹,但是如何在二叉樹中移動,或者創建 BinaryTreeGen Object 的正確方法是什么?

您遇到的基本問題是:

二叉樹需要 oracle。 此 oracle 具有以下 function: 給定任意 2 個對象,它們要么存在於樹中,要么正在添加到樹中,哪一個在另一個之前 哪個“低”?

沒有這個 oracle,你就不能制作二叉樹。

想象一下,我讓你在一棵二叉樹中布置一堆彈珠。 我遞給你彈珠,你應該通過稱量彈珠來做到這一點。 但是,您沒有准確的秤,並且任何 2 顆彈珠之間的重量差異是真實的,但很小。

不能完成要求你做的工作。 是不可能的。

這同樣適用於這里: BinTreeGen的代碼完全不知道它怎么可能“稱重”object。 它不知道如何從任何給定的 object 派生一個屬性,該屬性本身是“有序的”(例如單個數字),或者如何在給定 2 個對象的情況下確定哪個是“較低的”。

E extends Comparable<E>的要點是,您要存儲在二叉樹中的東西保證是“自排序的”:成為保證讓您調用a.compareTo(b)的類型的對象,其中ab是存儲在樹中的任何對象,並且此方法都存在並給出合理的答案:如果“a”較低,則為負數,如果“b”較低,則為正數,如果 a 和 b 為 0實際上同樣的 object。

那么,解決方法是使用一些東西來代替固有排序的Object (在BinTreeGen<Object>中)。 定義為:它實現了Comparable<X> ,其中 X 是它本身。

一些例子是:

  • java.lang.Integer
  • java.lang.String
  • java.lang.BigDecimal

沒有這個,問“我如何使這項工作”有點像問:“我如何找到一個圓圈中的角”或“我如何 go 比光速快”或“我如何使 1+ 1 等於 3"。 你在要求不可能的事。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM