[英]Bound mismatch: The type is not a valid substitute for the bounded parameter <E extends Comparable<E>> of the type
[英]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)
的類型的對象,其中a
和b
是存儲在樹中的任何對象,並且此方法都存在並給出合理的答案:如果“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.