欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的泛型詳細(xì)解析

 更新時(shí)間:2024年01月12日 10:37:03   作者:咕咕貓_  
這篇文章主要介紹了Java中的泛型詳細(xì)解析,泛型又稱參數(shù)化類型,是JDK5.0出現(xiàn)的新特性,解決了數(shù)據(jù)類型的安全型問(wèn)題,Java泛型可以保證如果程序在編譯時(shí)沒(méi)用發(fā)出警告,運(yùn)行時(shí)就不會(huì)產(chǎn)生classCastException異常,需要的朋友可以參考下

引言

使用傳統(tǒng)方法的問(wèn)題分析

1.不能對(duì)加入到集合ArrayList中的數(shù)據(jù)類型進(jìn)行約束(不安全)

2.遍歷的時(shí)候需要進(jìn)行類型轉(zhuǎn)換,如果集合中的數(shù)據(jù)量較大,對(duì)效率有影響

泛型的好處

1.編譯時(shí)會(huì)檢查添加元素的類型,提高了安全性

2.減少了類型轉(zhuǎn)換的次數(shù),提高效率

3.不再提示編譯警告

一、泛型介紹

泛(廣泛)型(類型)

1.泛型又稱參數(shù)化類型,是JDK5.0出現(xiàn)的新特性,解決了數(shù)據(jù)類型的安全型問(wèn)題

2.在類聲明或?qū)嵗瘯r(shí)只要指定好需要的具體類型即可

3.Java泛型可以保證如果程序在編譯時(shí)沒(méi)用發(fā)出警告,運(yùn)行時(shí)就不會(huì)產(chǎn)生ClassCastException異常。同時(shí),代碼更加簡(jiǎn)潔、健壯

4.泛型的作用是:可以在類聲明時(shí)通過(guò)一個(gè)標(biāo)識(shí)表示類中某個(gè)屬性的類型,或者是某個(gè)方法的返回值的類型,或者是參數(shù)類型

二、泛型的語(yǔ)法

2.1 泛型的聲明

  • class 類<K,V> { }
  • interface 接口<T> { }

說(shuō)明:1.其中的K,V,T不代表值,而是表示類型; 2.任意字母都可以,常用T表示,是Type的縮寫

2.2 泛型的實(shí)例化

要在類名后面指定類型參數(shù)的值(類型)

1. List<String> strList = new ArrayList<String>();

2. Iterator<Customer> iterator = customers.iterator();

三、泛型使用的注意事項(xiàng)和細(xì)節(jié)

1.給泛型指向數(shù)據(jù)類型時(shí),要求是引用類型,不能是基本數(shù)據(jù)類型

2.在給泛型指定具體類型后,可以傳入該類型或者其子類類型

3.泛型使用形式

①List <Integer> list1 = new ArrayList<Integer>();

②List <Integer> list2 = new ArrayList<>();

③如果這樣寫 List list3 = new ArrayList();默認(rèn)給它的泛型是Object

四、自定義泛型

4.1 基本語(yǔ)法

class 類名<T,R...> {  //...表示可以有多個(gè)泛型
        成員
}

4.2 注意細(xì)節(jié)

1.普通成員可以使用泛型(屬性、方法)

2.使用泛型的數(shù)組不能初始化

3.靜態(tài)方法中不能使用類的泛型

4.泛型類的類型,是在創(chuàng)建對(duì)象時(shí)確定的(因?yàn)閯?chuàng)建對(duì)象時(shí),需要指定確定類型)

5.如果在創(chuàng)建對(duì)象時(shí)沒(méi)用指定類型,默認(rèn)為Objcet

4.3 自定義泛型接口

4.3.1 基本語(yǔ)法

interface 接口名 <T,R...> {
}

4.3.2 注意細(xì)節(jié)

1.接口中,靜態(tài)成員也不能使用泛型()

2.泛型接口的類型,在繼承接口或者實(shí)現(xiàn)接口時(shí)確定

3.沒(méi)有指定類型,默認(rèn)為Object

4.4 自定義泛型方法

4.4.1 基本語(yǔ)法

修飾符 <T,R...>返回類型 方法名(參數(shù)列表) {
}

4.4.2 注意細(xì)節(jié)

1.泛型方法可以定義在普通類中,也可以定義在泛型類中

2.當(dāng)泛型方法唄調(diào)用時(shí),類型會(huì)確定

3.pulbic void ear(E e) {} ,修飾符后沒(méi)有<T,R...>,eat方法不是泛型方法,而是使用了泛型

public class CustomMethodGeneric {
    public static void main(String[] args) {
        Car car = new Car();
        car.fly("寶馬",100);//當(dāng)調(diào)用方法時(shí)傳入?yún)?shù),編譯器就會(huì)確定類型
        Fish<String, ArrayList> fish = new Fish<>();
        fish.hello(new ArrayList<>(),1.1f);
    }
}
//泛型方法,可以定義在普通類中,也可以定義在泛型類中
class Car { //普通類
    public void run() { //普通方法
    }
    //說(shuō)明,泛型方法
    //1. <T,R>就是泛型
    //2. 是提供給fly使用的
    public <T,R> void fly(T t, R r) { //泛型方法
        System.out.println(t.getClass()); //String
        System.out.println(r.getClass()); //Integer
    }
}
class Fish<T,R> { //泛型類
    public void run() { //普通方法
    }
    public<U,M> void eat(U u, M m) { //泛型方法
    }
    //說(shuō)明
    //1.下面的hi方法不是泛型方法
    //2.是hi方法使用了類聲明的泛型
    public void hi(T t){
    }
    //泛型方法可以使用類聲明的泛型,也可以使用自己聲明泛型
    public<K> void hello(R r,K k){
        System.out.println(r.getClass());
        System.out.println(k.getClass());
    }
}

五、泛型的繼承和通配符

通配符:?

1. 泛型不具備繼承性

2. <?> :支持任意泛型類型

泛型的上下限

3. <? extends A> :支持A類以及A類的子類,規(guī)定了泛型的上限

4. <? super A>:支持A類以及A類的父類,不限于直接父類,規(guī)定了泛型的下限

/**
 * @author 咕咕貓
 * @version 1.0
 * 泛型的繼承與通配符
 */
@SuppressWarnings({"all"})
public class GenericExtends {
    public static void main(String[] args) {
        Object o = new String("XXX");
        //泛型沒(méi)有繼承性
        //List<Object> list = new ArrayList<String>();
        //舉例說(shuō)明下面三個(gè)方法的使用
        List<Object> list1 = new ArrayList<>();
        List<String> list2 = new ArrayList<>();
        List<AA> list3 = new ArrayList<>();
        List<BB> list4 = new ArrayList<>();
        List<CC> list5 = new ArrayList<>();
        //如果是 List<?> c ,可以接受任意的泛型類型
        printCollection1(list1);
        printCollection1(list2);
        printCollection1(list3);
        printCollection1(list4);
        printCollection1(list5);
        //List<? extends AA> c: 表示 上限,可以接受 AA 或者 AA 子類
        // printCollection2(list1);//×
        // printCollection2(list2);//×
        printCollection2(list3);//√
        printCollection2(list4);//√
        printCollection2(list5);//√
        //List<? super AA> c: 支持 AA 類以及 AA 類的父類,不限于直接父類
        printCollection3(list1);//√
        //printCollection3(list2);//×
        printCollection3(list3);//√
        //printCollection3(list4);//×
        //printCollection3(list5);//×
    }
        //說(shuō)明: List<?> 表示 任意的泛型類型都可以接受
        public static void printCollection1(List<?> c) {
            for (Object object : c) { // 通配符,取出時(shí),就是 Object
                System.out.println(object);
            }
        }
        // ? extends AA 表示 上限,可以接受 AA 或者 AA 子類
        public static void printCollection2(List<? extends AA> c) {
            for (Object object : c) {
                System.out.println(object);
            }
        }
        // ? super 子類類名 AA:支持 AA 類以及 AA 類的父類,不限于直接父類,
        //規(guī)定了泛型的下限
        public static void printCollection3(List<? super AA> c) {
            for (Object object : c) {
                System.out.println(object);
            }
        }
}
class AA {
}
class BB extends AA {
}
class CC extends BB {
}

六、JUnit

6.1 為什么需要JUnit

1.一個(gè)類有很多功能代碼需要測(cè)試,為了測(cè)試,就需要寫到main方法中

2.如果 有多個(gè)功能代碼測(cè)試,就需要來(lái)回注銷,切換很麻煩

6.2 基本介紹

1.JUnit是一個(gè)Java語(yǔ)言的單元測(cè)試框架

2.多數(shù)Java的開(kāi)發(fā)環(huán)境都已經(jīng)集成了JUnit作為單元測(cè)試的工具

使用:在需要測(cè)試的代碼前加上@Test,按alt + enter選擇版本即可

到此這篇關(guān)于Java中的泛型詳細(xì)解析的文章就介紹到這了,更多相關(guān)Java泛型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java自定義JDBC實(shí)現(xiàn)連接池

    java自定義JDBC實(shí)現(xiàn)連接池

    本文主要介紹了java自定義JDBC實(shí)現(xiàn)連接池,包含實(shí)現(xiàn)JDBC連接池以及SQLException?異常的處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • Spring Boot文件上傳原理與實(shí)現(xiàn)詳解

    Spring Boot文件上傳原理與實(shí)現(xiàn)詳解

    這篇文章主要介紹了Spring Boot 文件上傳原理與實(shí)現(xiàn)詳解,前端文件上傳是面向多用戶的,多用戶之間可能存在上傳同一個(gè)名稱、類型的文件;為了避免文件沖突導(dǎo)致的覆蓋問(wèn)題這些應(yīng)該在后臺(tái)進(jìn)行解決,需要的朋友可以參考下
    2024-01-01
  • Java中使用SQLite數(shù)據(jù)庫(kù)的實(shí)現(xiàn)示例

    Java中使用SQLite數(shù)據(jù)庫(kù)的實(shí)現(xiàn)示例

    SQLite是一種嵌入式數(shù)據(jù)庫(kù)引擎,可以在各種平臺(tái)上使用,本文主要介紹了Java中使用SQLite數(shù)據(jù)庫(kù)的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Java使用DOM4j實(shí)現(xiàn)讀寫XML文件的屬性和元素

    Java使用DOM4j實(shí)現(xiàn)讀寫XML文件的屬性和元素

    這篇文章主要為大家詳細(xì)介紹了Java使用DOM4j實(shí)現(xiàn)讀寫XML文件的屬性和元素,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • java操作json對(duì)象出現(xiàn)StackOverflow錯(cuò)誤的問(wèn)題及解決

    java操作json對(duì)象出現(xiàn)StackOverflow錯(cuò)誤的問(wèn)題及解決

    這篇文章主要介紹了java操作json對(duì)象出現(xiàn)StackOverflow錯(cuò)誤的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 利用Maven實(shí)現(xiàn)將代碼打包成第三方公共jar包

    利用Maven實(shí)現(xiàn)將代碼打包成第三方公共jar包

    在項(xiàng)目開(kāi)發(fā)過(guò)程中,我們經(jīng)常需要將一些公共方法提取出來(lái),然后單獨(dú)封裝成一個(gè)第三方公共jar包,采用普通的方式打包后的jar,依賴的工程執(zhí)行編譯時(shí),卻提示找不到對(duì)應(yīng)的依賴包,那么如何將工程打包為可執(zhí)行jar包呢?下面向大家分享三種方法
    2022-10-10
  • Java讀取json數(shù)據(jù)并存入數(shù)據(jù)庫(kù)的操作代碼

    Java讀取json數(shù)據(jù)并存入數(shù)據(jù)庫(kù)的操作代碼

    很多朋友問(wèn)大佬們JAVA怎么把json存入數(shù)據(jù)庫(kù)啊,這一問(wèn)題就把我難倒了,糾結(jié)如何操作呢,下面小編把我的經(jīng)驗(yàn)分享給大家,感興趣的朋友一起看看吧
    2021-08-08
  • Spring Boot 實(shí)現(xiàn)敏感詞及特殊字符過(guò)濾處理

    Spring Boot 實(shí)現(xiàn)敏感詞及特殊字符過(guò)濾處理

    這篇文章主要介紹了SpringBoot實(shí)現(xiàn)敏感詞及特殊字符過(guò)濾處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java實(shí)現(xiàn)外賣訂餐系統(tǒng)

    java實(shí)現(xiàn)外賣訂餐系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)外賣訂餐系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • spring整合redis消息監(jiān)聽(tīng)通知使用的實(shí)現(xiàn)示例

    spring整合redis消息監(jiān)聽(tīng)通知使用的實(shí)現(xiàn)示例

    在電商系統(tǒng)中,秒殺,搶購(gòu),紅包優(yōu)惠卷等操作,一般都會(huì)設(shè)置時(shí)間限制,本文主要介紹了spring整合redis消息監(jiān)聽(tīng)通知使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-12-12

最新評(píng)論