java泛型是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個參數(shù)(type parameter)這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,那java泛型類如何取得泛型?下面來我們就來給大家講解一下。
獲得泛型類的形式參數(shù):
Java中提供了Class接口用于描述類的運行時信息。此外,還提供了Type接口用于描述類的類型信息。Type接口有多個子類,包括Class、TypeVariable、ParameterizedType等,分別表示運行時類、類參數(shù)、參數(shù)化類型。獲得泛型類的形式參數(shù)代碼如下:
ArrayListarrayList = new ArrayList(); TypeVariable[] typeVariables = arrayList.getClass() .getTypeParameters(); System.out.println(Arrays.toString(typeVariables)); // E
利用Class類中的getTypeParameters()方法可以獲得描述形式參數(shù)的TypeVariable數(shù)組。
獲得泛型類的實際參數(shù)
v實際上,泛型類的實際參數(shù)是不可獲取的,因為在運行期進行了類型擦除。但有一種情況,可以簡介獲取泛型類的實際參數(shù),代碼如下:
ArrayListarrayList = new ArrayList() { private static final long serialVersionUID = 1 L; }; Type type = arrayList.getClass() .getGenericSuperclass(); ParameterizedType parameterizedType = (ParameterizedType) type; for (Type t: parameterizedType.getActualTypeArguments()) { System.out.println(t.getTypeName()); // java.lang.Integer }
注意,代碼中創(chuàng)建了一個匿名內部了對象arrayList。通過它的getClass()方法獲得了匿名內部類對應的Class對象,再借助getGenericSuperClass()方法獲得泛型父類的類型信息。
java泛型怎么使用?
1、泛型類和泛型接口
如果定義的一個類或接口有一個或多個類型變量,則可以使用泛型。泛型類型變量由尖括號界定,放在類或接口名的后面,下面定義尖括號中的T稱為類型變量。意味著一個變量將被一個類型替代替代類型變量的值將被當作參數(shù)或返回類型。對于List接口來說,當一個實例被創(chuàng)建以后,T將被當作一個函數(shù)的參數(shù)下面分別是泛型類、泛型接口的定義:
public class Gen { /泛型類…… } public interface Listextends Collection { //泛型接口 ……}
2、泛型方法
是否擁有泛型方法,與其所在的類是否泛型無關。
要定義泛型方法,只需將泛型參數(shù)列表置于返回值前。
如:
public class ExampleA { public < > voidf(Tx) { System.out.println(x.getClass() .get Name()); } publiec static void main(String args[]) { ExampleA ea = new ExampleA(); ea - f(""); ea.f(10); ea.f(a); ea.f(ea); } }
使用泛型方法時,不必指明參數(shù)類型,編譯器會自己找出具體的類型。泛型方法除了定義不同,調用就像普通方法一樣。需要注意,一個static方法,無法訪問泛型類的類型參數(shù),所以,若要static方法需要使用泛型能力,必須使其成為泛型方法。
Java語言中引入泛型是一個較大的功能增強,能夠提高Java程序的類型安全,并且還可以消除源代碼中的許多強制類型轉換,減少代碼出錯的機會。最后大家如果想要了解更多java初識知識,敬請關注賦能網(wǎng)。
本文鏈接:
本文章“java泛型類如何取得泛型?java泛型怎么使用?”已幫助 100 人
免責聲明:本信息由用戶發(fā)布,本站不承擔本信息引起的任何交易及知識產權侵權的法律責任!
本文由賦能網(wǎng) 整理發(fā)布。了解更多培訓機構》培訓課程》學習資訊》課程優(yōu)惠》課程開班》學校地址等機構信息,可以留下您的聯(lián)系方式,讓課程老師跟你詳細解答:
咨詢熱線:4008-569-579