您好,歡迎來(lái)到賦能網(wǎng)!

java泛型類如何取得泛型?java泛型怎么使用?

賦能網(wǎng) 2023-05-09 100

java泛型是參數(shù)化類型,也就是說(shuō)所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù)(type parameter)這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,那java泛型類如何取得泛型?下面來(lái)我們就來(lái)給大家講解一下。

獲得泛型類的形式參數(shù):

Java中提供了Class接口用于描述類的運(yùn)行時(shí)信息。此外,還提供了Type接口用于描述類的類型信息。Type接口有多個(gè)子類,包括Class、TypeVariable、ParameterizedType等,分別表示運(yùn)行時(shí)類、類參數(shù)、參數(shù)化類型。獲得泛型類的形式參數(shù)代碼如下:

ArrayListarrayList = new ArrayList();
TypeVariable[] typeVariables = arrayList.getClass()
.getTypeParameters();
System.out.println(Arrays.toString(typeVariables)); // E

利用Class類中的getTypeParameters()方法可以獲得描述形式參數(shù)的TypeVariable數(shù)組。

獲得泛型類的實(shí)際參數(shù)

v實(shí)際上,泛型類的實(shí)際參數(shù)是不可獲取的,因?yàn)樵谶\(yùn)行期進(jìn)行了類型擦除。但有一種情況,可以簡(jiǎn)介獲取泛型類的實(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)建了一個(gè)匿名內(nèi)部了對(duì)象arrayList。通過(guò)它的getClass()方法獲得了匿名內(nèi)部類對(duì)應(yīng)的Class對(duì)象,再借助getGenericSuperClass()方法獲得泛型父類的類型信息。

java泛型怎么使用?

1、泛型類和泛型接口

如果定義的一個(gè)類或接口有一個(gè)或多個(gè)類型變量,則可以使用泛型。泛型類型變量由尖括號(hào)界定,放在類或接口名的后面,下面定義尖括號(hào)中的T稱為類型變量。意味著一個(gè)變量將被一個(gè)類型替代替代類型變量的值將被當(dāng)作參數(shù)或返回類型。對(duì)于List接口來(lái)說(shuō),當(dāng)一個(gè)實(shí)例被創(chuàng)建以后,T將被當(dāng)作一個(gè)函數(shù)的參數(shù)下面分別是泛型類、泛型接口的定義:

public class Gen
{
    /泛型類……
}
public interface Listextends Collection
{ //泛型接口
    ……}

2、泛型方法

是否擁有泛型方法,與其所在的類是否泛型無(wú)關(guān)。

要定義泛型方法,只需將泛型參數(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í),不必指明參數(shù)類型,編譯器會(huì)自己找出具體的類型。泛型方法除了定義不同,調(diào)用就像普通方法一樣。需要注意,一個(gè)static方法,無(wú)法訪問(wèn)泛型類的類型參數(shù),所以,若要static方法需要使用泛型能力,必須使其成為泛型方法。

Java語(yǔ)言中引入泛型是一個(gè)較大的功能增強(qiáng),能夠提高Java程序的類型安全,并且還可以消除源代碼中的許多強(qiáng)制類型轉(zhuǎn)換,減少代碼出錯(cuò)的機(jī)會(huì)。最后大家如果想要了解更多java初識(shí)知識(shí),敬請(qǐng)關(guān)注賦能網(wǎng)。


本文鏈接:

本文章“java泛型類如何取得泛型?java泛型怎么使用?”已幫助 100 人

免責(zé)聲明:本信息由用戶發(fā)布,本站不承擔(dān)本信息引起的任何交易及知識(shí)產(chǎn)權(quán)侵權(quán)的法律責(zé)任!

本文由賦能網(wǎng) 整理發(fā)布。了解更多培訓(xùn)機(jī)構(gòu)》培訓(xùn)課程》學(xué)習(xí)資訊》課程優(yōu)惠》課程開(kāi)班》學(xué)校地址等機(jī)構(gòu)信息,可以留下您的聯(lián)系方式,讓課程老師跟你詳細(xì)解答:
咨詢熱線:4008-569-579

如果本頁(yè)不是您要找的課程,您也可以百度查找一下: