簡體   English   中英

如何使用Comparables在Java中創建自定義參數化列表對象?

[英]How can a custom parameterized list object be created in Java with Comparables?

我試圖在Java中創建一個自定義列表對象,該對象將在“ <>”中具有參數化類型(如ArrayLists)。 但是,這些參數化類型需要實現Comparable接口(因為列表將自動排序和組織)。

我遇到的問題是語法,並確保1)列表元素是可比較的對象,而不僅僅是任何對象,以及2)諸如get(index) getter方法應返回列表類型的對象而無需強制轉換,即如果使用< Integer >參數化創建的列表,則get()的返回類型應為Integer,而不是Comparable或Object。

我知道可以使用< E >< T >類的東西來創建Java中的參數化對象,但這不允許我要求列表中的元素是可比較的。

順便說一句,如果您有任何評論,例如“僅使用ArrayList或LinkedList”。 或“您為什么要使用自定義列表,這很愚蠢?”, 請將其保留給自己 我想創建一個組織良好,高效的列表系統,該列表系統不適合任何現有結構。 要對列表進行自動排序,必須具有“可比性”要求。

如果有人可以告訴我如何執行此操作,將不勝感激。

可比較的對象:

<V extends Comparable<V>>

在定義類型參數時,可以使用extends關鍵字來指定您的類只能接受具有特定超類型(在您的情況下為Comparable )的類型參數。
至於get方法-只需使用與返回類型相同的type參數即可。 例如:

public class MyList<T extends Comparable<T>> {

    public T get(int index) {
        ...
    }
}

您應使用上限Comparable聲明泛型類型參數,以確保各項都是Comparable 但是, Comparable本身通常具有一個類型參數 例如, Integer實現Comparable<Integer>

T extends Comparable<T>是否起作用? 可以,但是如果Superclass implements Comparable<Superclass> ,則子Subclass也實現Comparable<Superclass> 為了解決這種可能性,請引入一個下限為T的通配符。

public class CustomParameterizedList<T extends Comparable<? super T>>

這遵循標准Java中的現有模式,例如Collections.sort ,它類似地定義了T

 public static <T extends Comparable<? super T>> void sort(List<T> list) 

Java泛型教程對為什么<T extends Comparable<? super T>> 解釋 <T extends Comparable<? super T>> <T extends Comparable<? super T>><T extends Comparable<T>>更靈活。

T不必與自己完全可比。 所需要做的就是讓T與其超類型之一可比。 這給我們:

 public static <T extends Comparable<? super T>> T max(Collection<T> coll) 

暫無
暫無

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

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