[英]Keyword extends with Type Parameter<T> in Generic Java
考慮
Gen<T>
所以,當我寫這樣的東西
Gen<Integer> someRef = new Gen<>();
Gen<String> someRef = new Gen<>();
據我了解,
Java編譯器實際上並未創建Gen或任何其他通用類的不同版本。 盡管用這些術語來思考對我很有幫助,但實際上並非如此。 相反,編譯器會刪除所有通用類型信息,並替換必要的強制類型轉換,以使我的代碼像創建了特定版本的Gen一樣運行。 因此,實際上我的程序中實際上只存在一個Gen版本。 刪除通用類型信息的過程稱為擦除。
現在考慮這個,
interface MinMax<T extends Comparable<T>> {
通常,以與通用類相同的方式聲明通用接口。 在這種情況下,類型參數為T,其上限為Comparable,它是java.lang定義的接口。 實現Comparable的類定義了可以排序的對象。 因此,要求Comparable的上限可確保MinMax僅可與能夠比較的對象一起使用。 注意,Comparable也是通用的。 (它由JDK 5進行了泛型改型。)它采用類型參數,該參數指定要比較的對象的類型。
接下來,MinMax由MyClass實現。
請注意MyClass的聲明,如下所示:
class MyClass<T extends Comparable<T>> implements MinMax<T> {
我的困惑來了,當我寫這樣的東西時,
MyClass<Integer> ......
類型參數T將被Integer代替。 或說其他任何版本(取決於我將要操作的對象的類型)。
我很清楚一個類實現了一個接口。 關於上述內容,上述案例不可以這樣工作嗎?
class MyClass<Integer(or some other version) extends Comparable<Integer>> implements MinMax<Integer> {
因此,這里的類如何擴展接口,
Integer(or some other version) extends Comparable<Integer>
我肯定知道,我對上述情況的理解不正確。 請詳細說明?
原因是在泛型中,關鍵字extends
在不同的上下文中使用 。
在泛型, T extends Something
表示T
將是一個子類的Something
或將實現Something
(在接口中的情況下)。 綁定的類型並不重要(類或接口)-重要的是T
是提供的綁定的子類型 。
更多信息:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.