public static <T> List<T> asList(T... a) 原型是怎么回事?
翻翻java sdk的源代码 发现这个看起来好屌,
<T> List<T> 是怎么回事 看起来好像颜文字,一个在哭的List
第一个<T>这个token是什么意思呢?为什么不省略,省略了我也知道是返回一个
List<T>啊
这个姿势怎么学?
赞同 14
反对,不会显示你的姓名
public :
template < typename T >
static List < T > asList ( T a );
那三个T分别是这三个意思
赞同 3
反对,不会显示你的姓名
巢鹏 ,Java 码农
public static < T_T > List < T_T > asList ( T_T ... a );
赞同 2
反对,不会显示你的姓名
第一个T就是振臂一呼,告诉大伙,哥是个类型,以后见到别不认识我。
赞同 8
反对,不会显示你的姓名
泛型的意思是就是说类型可以在以后指定,但是这仍然需要告诉编译器,我需要某个类型作为一个占位符,比如T。
public List < T > fuck ( T shit ) {
...
}
然后编译器会问你说,T是个什么鬼?你没有告诉我啊(Cannot resolve symbol)。
所以需要在前面显式地声明一下(这就是为啥不能省略),就成了
public < T > List < T > fuck ( T ...) ...
共出现了三个T,第一个是用来声明
类型参数 的,后面的两个才是泛型的实现。
所以说Java这种写法丑死了。
看我C#声明和使用多么一致。
public List < T > fuck < T >( T shit )
{
...
}
看我C++,清清楚楚地标明啥是啥。
template < typename T >
list < T > fuck ( T ... shits )
{
...
}
说起来你要觉得看着像颜文字的话,可以这样写啊:
< Type extends Object > List < Type > fuck ( Type ... ) ...
然而并没有什么用。
以上。
赞同 0
反对,不会显示你的姓名
知乎用户
这里用了Java泛型 T是一种类型 List是返回值为List类型,内部装有类型为T的对象,而括号里面的表示传递一组T类型的变量,这种方式叫可变参数传递,其实相当于一个T类型的数组。
赞同 0
反对,不会显示你的姓名
zozx ,Android程序员.强迫症患者。
第一个T是声明泛型,List的T是List存T类型的元素,最后一个T表示asList这个方法接收的参数类型是T类型的。
嗯,我是这么理解的。
赞同 1
反对,不会显示你的姓名
第一个出现的T,是定义一个范型名为T,当然可以为任何一个或多个字母。
后面出现两个T都是在使用范型,前一个代表返回T类型变量,后一个是只接受T类型变量的可变参数(可变参数:一个或者多个,其实最后会被转化成数组)。
赞同 3
反对,不会显示你的姓名
代码中一共出现了三个T,第一个是定义泛型的意思,第二个是返回的类型,第三个是参数的类型,这三个类型可以说是由参数的类型来决定的。