[英]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.