簡體   English   中英

返回類型的Java泛型

[英]Java generic at return type

我見過這樣的代碼,無法理解它的意義:

public class ClassA{

public <T> void getContactName(ContactList<T> contactList){
    //do something
}    

}

基本上我不明白這一點。 該類編譯沒有任何錯誤。 我認為ClassA也應該與參數'T'一致。

謝謝

定義

public <T> void getContactName(ContactList<T> contactList){
    //do something
}    

表示只有方法是通用的,名稱為T的類型僅在方法范圍內有效。 如果T類型參數僅在單個方法中使用,則不需要該類是通用的。

作為旁注,請記住,在Java中,您可以制作通用:

  • 課程(匿名者除外)
  • 方法
  • 接口

但是你不能制作通用的:

  • 例外
  • 匿名課程
  • 枚舉

Java Tutorial on Generic Methods and Generic Types以及泛型方法的詳細示例和用法中有更好的解釋。

這是一個例子(內置Arrays類)。 查看方法簽名,確保方法返回類型與方法參數完全相同,因為類本身不是通用的,但您可以將方法設置為泛型。

class Arrays {
    public static <T> List<T> asList(T... a) {
    ...
}

您可以創建上面提到的static generic utility methods ,您don't need to create object類的don't need to create object

根據Java語言規范:

  • 類型變量是非限定標識符。 類型變量由泛型類聲明,通用接口聲明,泛型方法聲明和泛型構造函數聲明引入。
  • 如果一個類聲明了一個或多個類型變量,則它是通用的。 這些類型變量稱為類的類型參數。 它定義了一個或多個充當參數的類型變量。 泛型類聲明定義了一組參數化類型,每個類型都可以調用類型參數部分。 所有這些參數化類型在運行時共享同一個類。
  • 如果接口聲明一個或多個類型變量,則接口是通用的。 這些類型變量稱為接口的類型參數。 它定義了一個或多個充當參數的類型變量。 通用接口聲明定義了一組類型,每種類型都可以調用類型參數部分。 所有參數化類型在運行時共享相同的接口。
  • 如果方法聲明一個或多個類型變量,則該方法是通用的。 這些類型變量稱為方法的形式類型參數。 形式類型參數列表的形式與類或接口的類型參數列表相同。
  • 構造函數可以聲明為泛型,無論聲明構造函數的類本身是否為泛型。 如果構造函數聲明一個或多個類型變量,則它是通用的。 這些類型變量稱為構造函數的形式類型參數。 形式類型參數列表的形式與泛型類或接口的類型參數列表相同。

您可以像這樣使用您的方法:

new ClassA().<String>getContactName(contactList);

或者您不能指定類型參數

new ClassA().getContactName(contactList);

您可以閱讀規范以獲取更多詳細信息以及您可以在此處找到的常見問題

暫無
暫無

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

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