为什么泛型类的构造方法使用时要额外加<泛型> 80
为什么泛型类的构造方法使用时要额外加<泛型>例如:ArrayList的构造函数publicArrayList(){this.elementData=DEFAULTCAPA...
为什么泛型类的构造方法使用时要额外加<泛型>
例如:ArrayList的构造函数
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
但是使用时:
ArrayList<String> arrayList = new ArrayList<String>();
右边多了一个<String>
为啥? 展开
例如:ArrayList的构造函数
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
但是使用时:
ArrayList<String> arrayList = new ArrayList<String>();
右边多了一个<String>
为啥? 展开
2个回答
展开全部
第1,使用时是ArrayList<String> arrayList = new ArrayList<>();。注意右侧不是<String>,而是<>。更准确的说,因为右侧只能与左侧的相同,所以这里只能是<String>,所以简写为<>。
第2,使用时加<>是显然的,因为它就是泛型类的构造方法嘛,加上后,一方面更规范,另一方面也便与编译器调用。
第3,那么为什么构造函数中没有加<T>:因为泛型类中所有成员本身就是基于泛型的,声明已经在泛型类头部说明了。同时加上<T>的显式泛型方法或其他泛型类,一般是Static方法或Static类,他们独立于已有的泛型类,不能调用现有泛型类的成员,所以需要加<T>。因此构造函数和泛型类中的成员函数不加<T>,也可以和泛型Static方法相区分。
第4,Java的泛型,只是为了程序员编写方便,以及在编译的时候做类型检查,在实际运行当中,会进行类型擦除。而且泛型代码和非泛型代码在运行时也并不会快多少,但是逻辑上简洁很多。
第2,使用时加<>是显然的,因为它就是泛型类的构造方法嘛,加上后,一方面更规范,另一方面也便与编译器调用。
第3,那么为什么构造函数中没有加<T>:因为泛型类中所有成员本身就是基于泛型的,声明已经在泛型类头部说明了。同时加上<T>的显式泛型方法或其他泛型类,一般是Static方法或Static类,他们独立于已有的泛型类,不能调用现有泛型类的成员,所以需要加<T>。因此构造函数和泛型类中的成员函数不加<T>,也可以和泛型Static方法相区分。
第4,Java的泛型,只是为了程序员编写方便,以及在编译的时候做类型检查,在实际运行当中,会进行类型擦除。而且泛型代码和非泛型代码在运行时也并不会快多少,但是逻辑上简洁很多。
展开全部
一定要,拿常见的泛型方法举例
List算是最常见的。
自定义类
class testObject (){ public string TestName; public int TestIntValue;}//声明一个泛型类List<testObject > mList = new List<testObject >(); mList.Add(new testOnject(){TestName="somename" , TestIntValue = 1} );//调用泛型方法 testObject[] mArray = mList.ToArray<testObject[]>();
另外 Linq中 也大量需要这种利用<> 给出泛型具体目标类型的语法。
List算是最常见的。
自定义类
class testObject (){ public string TestName; public int TestIntValue;}//声明一个泛型类List<testObject > mList = new List<testObject >(); mList.Add(new testOnject(){TestName="somename" , TestIntValue = 1} );//调用泛型方法 testObject[] mArray = mList.ToArray<testObject[]>();
另外 Linq中 也大量需要这种利用<> 给出泛型具体目标类型的语法。
追问
我想知道为什么要加,明明构造方法上没有呀
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询