[英]Using a different method signature in Java
以下兩種方法可以很好地編譯,並能代表它們的意思。
public int returnArray()[]
{
int a[]={1 ,2};
return a;
}
public String[] returnArray(String[] array[])[]
{
return array;
}
根據此方法簽名,我們不能以某種方式具有如下所示的方法簽名嗎?
public <T>List rerurnList(List<T> list)<T>
{
return new ArrayList<T>();
}
此方法旨在返回泛型類型的java.util.List
。 它不會編譯 。 為了成功編譯,必須對其進行如下修改。
public <T>List<T> rerurnList(List<T> list)
{
return new ArrayList<T>();
}
在這種情況下,我們不能像第一種情況那樣具有方法簽名嗎?
出於某種原因,Java允許您像在C語言中那樣定義數組,在變量或方法名稱后添加[]
修飾符。 但是,使用泛型是不可能的。
泛型類型參數必須與正確的類型聲明,因為它們的類型描述符的一部分 。 數組也應該這樣聲明,因為它們也是類型描述符的一部分 。
為了理解為什么編譯器不允許您以這種方式編寫東西(以及為什么它不允許您像第一個示例中那樣編寫東西),我們需要將其分解為幾部分。
public int returnArray()[] { ... }
public
:公開聲明 int
:返回類型,整數 returnArray
:方法名稱 ()
:參數列表(空) []
:哎呀! 返回類型實際上是我們之前所說的數組 這樣更好:
public String[] returnArray(String[] array[])[]
public
:公開聲明 String[]
:返回類型,字符串數組 returnArray
:方法名稱 (String[] array[])
:參數列表...
String[]
:參數的類型,字符串數組 array
:參數名稱 []
:哎呀! 參數類型實際上是我們之前所說的數組 []
:再次糟糕! 返回類型實際上是我們之前所說的數組 腳注:請勿執行此操作,僅在類型中指定類型。 代替String[] array[]
,使用String[][] array
。
現在,數組事物的語法已經很清楚了,希望您理解為什么它應該是錯誤的,讓我們從一般事物開始:
public <T> List<T> rerurnList(List<T> list) { ... }
public
:公開聲明 <T>
:此方法使用通用類型T
List<T>
:返回類型, T
的通用List
rerurnList
:方法名稱 (List<T> list)
:參數列表
List<T>
:參數類型, T
通用List
list
:參數名稱 只是為了回答您的問題:由於參數列表和方法主體之間放置了<T>
,因此您為失敗的方法嘗試使用的語法肯定是錯誤的:
(List<T> list)<T>{
這根本不是有效的Java語法。 這不是標記通用方法的方式。 通過將類型參數- <P>
-放在方法訪問修飾符及其返回類型之間,您已經將該方法標記為通用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.