簡體   English   中英

關鍵字擴展了Type參數 <T> 在通用Java中

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

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