- N +

java泛型是什么,java泛型參數(shù)怎么傳入實參

大家好,今天來為大家解答java泛型是什么這個問題的一些問題點,包括java泛型參數(shù)怎么傳入實參也一樣很多人還不知道,因此呢,今天就來為大家分析分析,現(xiàn)在讓我們一起來看看吧!如果解決了您的問題,還望您關(guān)注下本站哦,謝謝~

Java為什么要有泛型

java里的泛型是奇葩的存在。這也是我經(jīng)常懟java的一個原因。

先說下泛型的主要作用:

1,強(qiáng)化類型安全,比如定義了一個List<String>,那么里面只能存放String,不允許存放其他類型(派生自String的除外)。類型安全應(yīng)該在編譯和運行時都能體現(xiàn)。

2,提高性能,減少類型轉(zhuǎn)換和裝箱拆箱次數(shù)。

再說下java泛型奇葩之處:

1,java泛型實現(xiàn)的原理叫類型擦除,不管代碼中怎么定義泛型,編譯后都變成object,因此不能實現(xiàn)運行時的類型安全。而且java編譯器不夠聰明,可以很容易騙過去。舉個例子,你調(diào)用了第三方的接口返回List<String>,但實際拿到的值里面可能跟String沒有半毛錢關(guān)系。

2,既然類型被擦除,那么類型轉(zhuǎn)換就不可避免了,因此使用泛型和非泛型在性能上沒有任何變化。

java怎么獲取一個泛型方法的真實泛型類型

我認(rèn)為,如果在方法內(nèi)部獲取還是可行的,但如果希望通過一個方法來獲取一個泛型方法的真實泛型類型,那應(yīng)該是實現(xiàn)不了。

首先Java中的泛型,也叫參數(shù)化類型,沒記錯泛型應(yīng)該是jdk5引入的特性,泛型目的在于使數(shù)據(jù)類型可以作為參數(shù)傳入,從而可以動態(tài)的改變某個變量的數(shù)據(jù)類型。

那么什么是泛型方法呢?就是泛型類型是聲明在方法上,只有當(dāng)調(diào)用該方法時才會將真實類型傳入。如果你是在方法內(nèi)部獲取那直接調(diào)用泛型對象的getClass方法即可。但如果希望通過一方法來獲取某個泛型方法的真實類型,我認(rèn)為沒法實現(xiàn)。因為未調(diào)用方法時,真實的數(shù)據(jù)類型還未入,所以根本無法取到泛型對應(yīng)的真實類型。

所以下面我就說說如何在泛型方法內(nèi)部獲取泛型的真實類型。

老規(guī)矩,咱寫段代碼再來解釋。泛型方法的例子如下圖:

在上圖中,我聲明了一個泛型方法:findFirst,用于獲取數(shù)組的第一個元素。

運行結(jié)果如下圖:

以上就是我的答案,希望對你有所幫助吧

JAVA為什么要用integer定義泛型

泛型的好處是在編譯的時候檢查類型安全,并且所有的強(qiáng)制轉(zhuǎn)換都是自動和隱式的,以提高代碼的重用率。

END,本文到此結(jié)束,如果可以幫助到大家,還望關(guān)注本站哦!

返回列表
上一篇:
下一篇: