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

Java中泛型的接口、通配符使用詳解

 更新時(shí)間:2023年08月26日 10:18:52   作者:Mr.樂.  
這篇文章主要介紹了Java中泛型的接口、通配符使用詳解,編譯時(shí)的類型安全監(jiān)測(cè)機(jī)制,也可以把這個(gè)數(shù)據(jù)類型理解成是一種可以傳遞的參數(shù),需要的朋友可以參考下

Java中的泛型

泛型應(yīng)用類型

泛型定義時(shí)常用方式有三種(可參考List<E>,Map<K,V)等接口定義):

  • 泛型類:class 類名<泛型,…>{}
  • 泛型接口:interface 接口名<泛型,…>{}
  • 泛型方法: <泛型> 方法返回值類型 方法名(形參){}

1 -定義

編譯時(shí)的類型安全監(jiān)測(cè)機(jī)制,也可以把這個(gè)數(shù)據(jù)類型理解成是一種可以傳遞的參數(shù)

泛型類、泛型方法、泛型接口

2 - 泛型定義格式

<類型>:表示一種類型的格式

<類型1,類型2......> :表示是多種類型的格式,用逗號(hào)分割

class Array<T>{//類泛型:類名<泛型>
  Object[] array=new Object[10];
  public void add(T t){}//通過(guò)類泛型約束方法參數(shù)類型
  public T get(int i){//通過(guò)類泛型約束方法返回值類型
    return (T)array[i];
  }
}

3 - 使用泛型的好處

  • 把運(yùn)行期間可能出現(xiàn)的問(wèn)題,拿到編譯期間(錯(cuò)誤等級(jí)的提升)
  • 避免強(qiáng)制類型轉(zhuǎn)換丟失精度等問(wèn)題的出現(xiàn)

4 - 泛型類

/**
 * @author Mr.樂
 * @Description 泛型類
 * E  -  Element
 * K  -  Key
 * T  -  Type
 * V  -  Value
 */
public class Generic<T> {
//這個(gè)成員變量的類型為T,T的類型由外部指定  
    private T t;
    public T getT() {
        return t;
    }
    public void setT(T t) {
        this.t = t;
    }
}
-------------------------------------
/**
 * @author Mr.樂
 * @Description 泛型類測(cè)試類
 */
public class Demo01 {
    public static void main(String[] args) {
        Generic<String> strG = new Generic<>();//創(chuàng)建泛型類對(duì)象
        strG.setT("我是一個(gè)字符串!~");
        System.out.println(strG.getT());
        Generic<Integer> intG = new Generic<>();
        intG.setT(1314);
        System.out.println(intG.getT());
    }
}

5 -泛型方法

/**
 * @author Mr.樂
 * @Description
 */
public class Generic {
    //泛型方法
    /*public <T> void show(T i) {
        System.out.println(i);
    }*/
    //有返回值類型的泛型方法
    public <T> T show(T i) {
        return i;
    }
}
-----------------------------
/**
 * @author Mr.樂
 * @Description
 */
public class Demo02 {
    public static void main(String[] args) {
        Generic g = new Generic();//創(chuàng)建泛型方法類的對(duì)象
        System.out.println(g.show(1314));
        g.show("String");
        g.show(3.14f);
        g.show(new Student("Andy",18));
    }
}

6 - 泛型接口

/**
 * @author Mr.樂
 * @Description
 */
public interface Generic <T>{
    void show(T t);
}
----------------------------------
/**
 * @author Mr.樂
 * @Description
 */
public class GenericImpl <T> implements Generic<T>{
    @Override
    public void show(T t) {
        System.out.println("我是實(shí)現(xiàn)類中的show方法:" + t);
    }
}
---------------------------------------------------------------------
/**
 * @author Mr.樂
 * @Description
 */
public class Demo03 {
    public static void main(String[] args) {
        GenericImpl<String> strG = new GenericImpl<>();
        strG.show("字符串");
        //通過(guò)匿名內(nèi)部類實(shí)現(xiàn)
        new Generic<Integer>() {
            @Override
            public void show(Integer integer) {
                System.out.println("我是匿名內(nèi)部類的show方法" + integer);
            }
        }.show(1314);
    }
}

7 - 泛型通配符

import java.util.ArrayList;
/**
 * @author Mr.樂
 * @Description  泛型通配符
 */
public class demo04 {
    public static void main(String[] args) {
        //<?>  通配所有  相當(dāng)于Object
        ArrayList<?> list01 = new ArrayList<Object>();
        ArrayList<?> list02 = new ArrayList<Integer>();//Integer為Object子類
        ArrayList<?> list03 = new ArrayList<Float>();
        ArrayList<?> list04 = new ArrayList<Number>();
        //<? extends Number>  上限  ??jī)H為Number類及子類
        ArrayList<? extends Number> list05 = new ArrayList<Number>();
        ArrayList<? extends Number> list06 = new ArrayList<Integer>();
        ArrayList<? extends Number> list07 = new ArrayList<Float>();
//        ArrayList<? extends Number> list08 = new ArrayList<String>();
        //<? super Number>   下限   ??jī)H為Number類及父類
        ArrayList<? super Number> list09 = new ArrayList<Number>();
//        ArrayList<? super Number> list10 = new ArrayList<Integer>();
//        ArrayList<? super Number> list11 = new ArrayList<String>();
        ArrayList<? super Number> list12 = new ArrayList<Object>();
    }
}

8 - 泛型通配符的基本應(yīng)用

import java.util.ArrayList;
/**
 * @author Mr.樂
 * @Description  泛型通配符的基本應(yīng)用
 */
public class Demo05 {
    public static void main(String[] args) {
        ArrayList<String> strList = new ArrayList<>();
        show(strList);
//        showUp(strList);
//        showDown(strList);
        ArrayList<Integer> intList = new ArrayList<>();
        show(intList);
        showUp(intList);
//        showDown(intList);
        ArrayList<Number> numList = new ArrayList<>();
        show(numList);
        showUp(numList);
        showDown(numList);
        ArrayList<Object> objList = new ArrayList<>();
        show(objList);
//        showUp(objList);
        showDown(objList);
    }
    //<?>  表示通配所有
    private static void show(ArrayList<?> list){
    }
    //表示上限
    private static void showUp(ArrayList<? extends Number> list){
    }
    //表示下限
    private static void showDown(ArrayList<? super Number> list){
    }
}

總結(jié)

泛型,大家用到最多的就是在集合中,在實(shí)際的開發(fā)過(guò)程中,自己可以使用泛型去簡(jiǎn)化開發(fā),保證同種類型,能很好的保證代碼質(zhì)量。

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

相關(guān)文章

  • SpringBoot集成 Prometheus進(jìn)行高效監(jiān)控的實(shí)現(xiàn)

    SpringBoot集成 Prometheus進(jìn)行高效監(jiān)控的實(shí)現(xiàn)

    Prometheus作為一個(gè)開源的監(jiān)控和告警工具,以其強(qiáng)大的數(shù)據(jù)采集、存儲(chǔ)和查詢能力,受到了眾多開發(fā)者的青睞,本文主要介紹了SpringBoot集成 Prometheus進(jìn)行高效監(jiān)控的實(shí)現(xiàn),感興趣的可以了解一下
    2024-07-07
  • 詳解mybatis中association和collection的column傳入多個(gè)參數(shù)問(wèn)題

    詳解mybatis中association和collection的column傳入多個(gè)參數(shù)問(wèn)題

    這篇文章主要介紹了詳解mybatis中association和collection的column傳入多個(gè)參數(shù)問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • jdbc結(jié)合dpcp連接池的封裝實(shí)例

    jdbc結(jié)合dpcp連接池的封裝實(shí)例

    下面小編就為大家?guī)?lái)一篇jdbc結(jié)合dpcp連接池的封裝實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • Spring Boot ActiveMQ發(fā)布/訂閱消息模式原理解析

    Spring Boot ActiveMQ發(fā)布/訂閱消息模式原理解析

    這篇文章主要介紹了Spring Boot ActiveMQ發(fā)布/訂閱消息模式原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Nett中的心跳機(jī)制與斷線重連詳解

    Nett中的心跳機(jī)制與斷線重連詳解

    這篇文章主要介紹了Nett中的心跳機(jī)制與斷線重連詳解,我們以客戶端發(fā)送心跳為例,平時(shí)我們的心跳實(shí)現(xiàn)方式可能是搞個(gè)定時(shí)器,定時(shí)發(fā)送是吧,但是在Netty中卻不一樣,心跳被稱為空閑檢測(cè),需要的朋友可以參考下
    2023-12-12
  • JAVA SE包裝類和泛型詳細(xì)介紹及說(shuō)明方法

    JAVA SE包裝類和泛型詳細(xì)介紹及說(shuō)明方法

    這篇文章主要介紹了JAVA SE包裝類和泛型的相關(guān)資料,包括基本數(shù)據(jù)類型與包裝類的對(duì)應(yīng)關(guān)系,以及裝箱和拆箱的概念,并重點(diǎn)講解了自動(dòng)裝箱和自動(dòng)拆箱的機(jī)制,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • 解決spring項(xiàng)目找不到Aspect依賴注解的問(wèn)題

    解決spring項(xiàng)目找不到Aspect依賴注解的問(wèn)題

    這篇文章主要介紹了解決spring項(xiàng)目找不到Aspect依賴注解的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 如何用Java來(lái)進(jìn)行文件切割和簡(jiǎn)單的內(nèi)容過(guò)濾的實(shí)現(xiàn)

    如何用Java來(lái)進(jìn)行文件切割和簡(jiǎn)單的內(nèi)容過(guò)濾的實(shí)現(xiàn)

    這篇文章主要介紹了如何用Java來(lái)進(jìn)行文件切割和簡(jiǎn)單的內(nèi)容過(guò)濾的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-01-01
  • Flink入門級(jí)應(yīng)用域名處理示例

    Flink入門級(jí)應(yīng)用域名處理示例

    這篇文章主要介紹了一個(gè)比較簡(jiǎn)單的入門級(jí)Flink應(yīng)用,代碼很容易寫,主要用到的算子有FlatMap、KeyBy、Reduce,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • Java網(wǎng)絡(luò)編程之UDP實(shí)現(xiàn)原理解析

    Java網(wǎng)絡(luò)編程之UDP實(shí)現(xiàn)原理解析

    UDP實(shí)現(xiàn)通信非常簡(jiǎn)單,沒有服務(wù)器,每個(gè)都是客戶端,每個(gè)客戶端都需要一個(gè)發(fā)送端口和一個(gè)接收端口,本文給大家介紹Java網(wǎng)絡(luò)編程之UDP實(shí)現(xiàn)原理解析,感興趣的朋友一起看看吧
    2021-09-09

最新評(píng)論