Java方法泛型之泛型類、泛型接口和泛型方法

Java方法泛型之泛型類、泛型接口和泛型方法

深圳達(dá)內(nèi)教育      2022-05-03 15:21:01     43

Java方法泛型之泛型類、泛型接口和泛型方法,泛型出現(xiàn)的動(dòng)機(jī)在于:有許多原因促成了泛型的出現(xiàn),而最引人注意的一個(gè)原因,就是為了創(chuàng)建容器類。泛型類容器類應(yīng)該算得上最具重

課程價(jià)格 請(qǐng)咨詢

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹

泛型出現(xiàn)的動(dòng)機(jī)在于:

有許多原因促成了泛型的出現(xiàn),而最引人注意的一個(gè)原因,就是為了創(chuàng)建容器類。

泛型類

容器類應(yīng)該算得上最具重用性的類庫之一。先來看一個(gè)沒有泛型的情況下的容器類如何定義:

public class Container{private String key;private String value;public Container(String k,String v){

Container類保存了一對(duì)key-value鍵值對(duì),但是類型是定死的,也就說如果我想要?jiǎng)?chuàng)建一個(gè)鍵值對(duì)是String-Integer類型的,當(dāng)前這個(gè)Container是做不到的,必須再自定義。那么這明顯重用性就非常低。

當(dāng)然,我可以用Object來代替String,并且在Java SE5之前,我們也只能這么做,由于Object是所有類型的基類,所以可以直接轉(zhuǎn)型。但是這樣靈活性還是不夠,因?yàn)檫€是指定類型了,只不過這次指定的類型層級(jí)更高而已,有沒有可能不指定類型?有沒有可能在運(yùn)行時(shí)才知道具體的類型是什么?

所以,就出現(xiàn)了泛型。

public class Container<K,V>{private K key;private V value;public Container(K k,V v){

在編譯期,是無法知道K和V具體是什么類型,只有在運(yùn)行時(shí)才會(huì)真正根據(jù)類型來構(gòu)造和分配內(nèi)存。如果你想學(xué)習(xí)Java可以來這個(gè)群,首先是五三二,中間是二五九,最后是九五二,里面有大量的學(xué)習(xí)資料可以下載??梢钥匆幌卢F(xiàn)在Container類對(duì)于不同類型的支持情況:

public class Main{public static void main(String[]args){輸出:name:findingsea

泛型接口

在泛型接口中,生成器是一個(gè)很好的理解,看如下的生成器接口定義:

public interface Generator<T>{public T next();

然后定義一個(gè)生成器類來實(shí)現(xiàn)這個(gè)接口:

public class FruitGenerator implements Generator<String>{

調(diào)用:

public class Main{public static void main(String[]args){

輸出:

Banana

泛型方法

一個(gè)基本的原則是:無論何時(shí),只要你能做到,你就應(yīng)該盡量使用泛型方法。也就是說,如果使用泛型方法可以取代將整個(gè)類泛化,那么應(yīng)該有限采用泛型方法。下面來看一個(gè)簡(jiǎn)單的泛型方法的定義:

public class Main{public static<T>void out(T t){

可以看到方法的參數(shù)徹底泛化了,這個(gè)過程涉及到編譯器的類型推導(dǎo)和自動(dòng)打包,也就說原來需要我們自己對(duì)類型進(jìn)行的判斷和處理,現(xiàn)在編譯器幫我們做了。這樣在定義方法的時(shí)候不必考慮以后到底需要處理哪些類型的參數(shù),大大增加了編程的靈活性。

再看一個(gè)泛型方法和可變參數(shù)的例子:

public class Main{public static<T>void out(T...args){for(T t:args){

輸出和前一段代碼相同,可以看到泛型可以和可變參數(shù)非常完美的結(jié)合。

Java相關(guān)技術(shù)內(nèi)容

Java泛型詳解:http://www.bjpowernode.com/tutorial_java_advance/645.html

以上就是深圳達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java方法泛型之泛型類、泛型接口和泛型方法”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。