public static <T> List<T> asList(T... a) 原型是怎麼回事?
翻翻java sdk的源代碼 發現這個看起來好屌,
&List& 是怎麼回事 看起來好像顏文字,一個在哭的List
第一個&這個token是什麼意思呢?為什麼不省略,省略了我也知道是返回一個
List&啊
這個姿勢怎麼學?
public:
template&
static List&
那三個T分別是這三個意思
public static &
泛型的意思是就是說類型可以在以後指定,但是這仍然需要告訴編譯器,我需要某個類型作為一個佔位符,比如T。
public List&
...
}
然後編譯器會問你說,T是個什麼鬼?你沒有告訴我啊(Cannot resolve symbol)。
所以需要在前面顯式地聲明一下(這就是為啥不能省略),就成了
public &
共出現了三個T,第一個是用來聲明類型參數的,後面的兩個才是泛型的實現。
所以說Java這種寫法醜死了。
看我C#聲明和使用多麼一致。
public List&
{
...
}
看我C++,清清楚楚地標明啥是啥。
template&
list&
{
...
}
說起來你要覺得看著像顏文字的話,可以這樣寫啊:
&
然而並沒有什麼用。
以上。&
public class A {
}
案例1. public static & List& asList(A... a);
案例2. public static List& asList(A... a);
案例1中A為「泛型A」,參數可以傳入任何類型對象的數組;案例2則不是,其中A為「類A」,參數只能傳入「類A」的對象的數組。
----------------------------------------------
補充一點,案例1中使用泛型絕不是因為要使參數可以傳入任意類型,如果僅僅是這樣,直接用Object就可以了。用泛型是因為可以使該方法的返回值成為一個指定類型的集合,這樣再次使用該集合的時候就有一個明確的類型了,這使的在將來該類型發生改變的時候編譯器會報錯,提醒你做相應的修改,而不是讓問題暴露在運行階段。這是泛型的重要作用之一。
第一個T就是振臂一呼,告訴大夥,哥是個類型,以後見到別不認識我。
List&
老子在vs里試了半天 往下一看是java
第一個T是聲明泛型,List的T是List存T類型的元素,最後一個T表示asList這個方法接收的參數類型是T類型的。
嗯,我是這麼理解的。
這裡用了Java泛型 T是一種類型 List是返回值為List類型,內部裝有類型為T的對象,而括弧裡面的表示傳遞一組T類型的變數,這種方式叫可變參數傳遞,其實相當於一個T類型的數組。
代碼中一共出現了三個T,第一個是定義泛型的意思,第二個是返回的類型,第三個是參數的類型,這三個類型可以說是由參數的類型來決定的。
第一個出現的T,是定義一個范型名為T,當然可以為任何一個或多個字母。
後面出現兩個T都是在使用范型,前一個代表返回T類型變數,後一個是只接受T類型變數的可變參數(可變參數:一個或者多個,其實最後會被轉化成數組)。推薦閱讀:
※Android有什麼好的技術點適合進行技術分享?
※如何有逼格地輸出「Hello, World!」?
※垃圾回收機制中,引用計數法是如何維護所有對象引用的?
※碼農們最常說的「謊言」有哪些?
※IT行業都有哪些職位,初學者(0基礎,新人)該如何選擇,才能夠快速進入這個行業?