最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java的泛型你真的了解嗎

 更新時間:2022年03月29日 11:03:15   作者:White?Code  
這篇文章主要為大家詳細(xì)介紹了java的泛型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

泛型的概述和優(yōu)勢

泛型概述

泛型:是JDK5中引入的特性,可以在編譯階段約束操作的數(shù)據(jù)類型,并進行檢查。
泛型的格式:<數(shù)據(jù)類型>; 注意:泛型只能支持引用數(shù)據(jù)類型。
集合體系的全部接口和實現(xiàn)類都是支持泛型的使用的。

泛型的好處:

統(tǒng)一數(shù)據(jù)類型。
把運行時期的問題提前到了編譯期間,避免了強制類型轉(zhuǎn)換可能出現(xiàn)的異常,因為編譯階段類型就能確定下來。

泛型可以在很多地方進行定義:

類后面           -->    泛型類
方法申明上    -->   泛型方法
接口后面        -->  泛型接口

自定義泛型類

泛型類的概述

定義類時同時定義了  泛型的類  就是  泛型類。
泛型類的格式:修飾符 class 類名<泛型變量(只能是引用類型)>{  }
范例:public class MyArrayList<T> {  }
 此處泛型變量T可以隨便寫為任意標(biāo)識,常見的如E、T、K、V等。

作用:編譯階段可以指 定數(shù)據(jù)類型**(必須是引用類型)**,類似于集合的作用。

課程案例導(dǎo)學(xué)

模擬ArrayList集合自定義一個集合MyArrayList集合,完成添加和刪除功能的泛型設(shè)計即可。

問題1:泛型類的核心思想?

把出現(xiàn)泛型變量的地方全部替換成傳輸?shù)恼鎸崝?shù)據(jù)類型

問題2:泛型類的作用?

編譯階段約定操作的數(shù)據(jù)的類型,類似于集合的作用。

自定義泛型方法

泛型方法的概述

定義方法時同時定義了  泛型的方法  就是  泛型方法。
泛型方法的格式:修飾符 <泛型變量> 方法返回值 方法名稱(形參列表){}
范例: public <T> void show(T t) {    // <T>表示參數(shù)的類型,一般在public或者static的后面 
            }
作用:方法中可以使用泛型接收一切實際類型的參數(shù),方法更具備通用性。

課程案例導(dǎo)學(xué)

給你任何一個類型的數(shù)組,都能返回它的內(nèi)容。也就是實現(xiàn)Arrays.toString(數(shù)組)的功能!

public class GeneticDemo {
    public static void main(String[] args) {
        String[] names = {"lushimeng", "yangyinyu", "wangliang", "xigua", "xiangjia"};
        printArray(names);  // 把printArray方法中出現(xiàn)泛型的地方全部變化為String類型
        Character[] character = {'2', 'd', 'd', 'r'};
        printArray(character);  // 把printArray方法中出現(xiàn)泛型的地方全部變化為Character類型
        Integer[] ages = {23, 435, 56, 67, 67};
        printArray(ages);  // 把printArray方法中出現(xiàn)泛型的地方全部變化為Integer類型

    }

    public static <T> void printArray(T[] array){
        if(array != null){
            StringBuilder sb = new StringBuilder("[");
            for(int i = 0; i < array.length; i++){
                sb.append(array[i]).append(i != array.length - 1 ? ", ": "");  // StringBuilder的鏈?zhǔn)骄幊?
            }
            sb.append("]");
            System.out.println(sb);
        }else{
            System.out.println(array);
        }
    }
}

問題1、泛型方法的核心思想:

把出現(xiàn)泛型變量的地方  全部替換   成傳輸?shù)恼鎸崝?shù)據(jù)類型

問題2、泛型方法的作用

方法中可以使用泛型接收一   切實際類型的參數(shù),方法更具備通用性

自定義泛型接口

泛型接口的概述

使用了泛型定義的接口就是泛型接口。
泛型接口的格式:修飾符 interface 接口名稱<泛型變量>{
                           }
范例: public interface Data<E>{}

課程案例導(dǎo)學(xué)

教務(wù)系統(tǒng),提供一個接口可約束一定要完成數(shù)據(jù)(學(xué)生,老師)的增刪改查操作

在這里插入圖片描述

問題1、泛型接口的作用

泛型接口可以約束實現(xiàn)類,實現(xiàn)類可以在實現(xiàn)接口的時候傳入自己操作的數(shù)據(jù)類型這樣重寫的方法都將是針對于該類型的操作。

泛型通配符、上下限

通配符:?

?   可以在“使用泛型”的時候代表     一切類型。
 E T K V 是在定義   泛型    的時候使用的。

泛型通配符:案例導(dǎo)學(xué)

開發(fā)一個極品飛車的游戲,所有的汽車都能一起參與比賽。
特別注意:雖然BMW和BENZ都繼承了Car但是ArrayList<BMW>和ArrayList<BENZ>與ArrayList<Car>沒有關(guān)系的!!
import java.util.ArrayList;

public class GenericDemo {
    public static void main(String[] args) {
        ArrayList<BENZ> benzs = new ArrayList<>();
        benzs.add(new BENZ());
        benzs.add(new BENZ());
        benzs.add(new BENZ());
        go(benzs);   // ? extends Car 為Car的子類都可以傳入進去

        ArrayList<BMW> bmws = new ArrayList<>();
        bmws.add(new BMW());
        bmws.add(new BMW());
        bmws.add(new BMW());
        go(bmws);

        ArrayList<Dog> dogs = new ArrayList<>();
        dogs.add(new Dog());
//        go(dogs);   // 不滿足泛型上下限的條件
    }
    public static void go(ArrayList<? extends Car> car){  // 上下限

    }
}

class Dog{
}

// 父類
class Car{
}

class BENZ extends Car{
}

class BMW extends Car{
}

泛型的上下限:

?   可以在“使用泛型”的時候代表     一切類型。
 ? extends Car: ?必須是Car或者其子類     泛型上限
 ? super Car : ?必須是Car或者其父類     泛型下限

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Java狀態(tài)機的一種優(yōu)雅寫法分享

    Java狀態(tài)機的一種優(yōu)雅寫法分享

    狀態(tài)機是一種數(shù)學(xué)模型,對于我們業(yè)務(wù)實現(xiàn)有很大的幫助。我們可以用非常多的方法實現(xiàn)狀態(tài)機,這篇文章就來介紹一個狀態(tài)機優(yōu)雅的實現(xiàn)方法,希望對大家有所幫助
    2023-04-04
  • 利用Jackson實現(xiàn)JSON數(shù)據(jù)的合并

    利用Jackson實現(xiàn)JSON數(shù)據(jù)的合并

    Jackson的功能豐富,安全可靠并且具有比較好的兼容性,這讓程序開發(fā)人員可以很方便地實現(xiàn)JSON 數(shù)據(jù)的相互轉(zhuǎn)換,下面小編就來和大家介紹一下如何利用Jackson實現(xiàn)JSON數(shù)據(jù)的合并吧
    2025-03-03
  • 關(guān)于Java中Bean的作用域詳解

    關(guān)于Java中Bean的作用域詳解

    這篇文章主要介紹了關(guān)于Java中Bean的作用域詳解,限定程序中變量的可?范圍叫做作?域,或者說在源代碼中定義變量的某個區(qū)域就叫做作?域,需要的朋友可以參考下
    2023-08-08
  • Spring @Lookup深入分析實現(xiàn)原理

    Spring @Lookup深入分析實現(xiàn)原理

    這篇文章主要介紹了Spring @Lookup實現(xiàn)原理,我們知道在spring容器中單獨的一個抽象類是不能成為一個bean的,那么有沒有辦法呢?這個時候我們可以使用Lookup注解
    2023-01-01
  • 如何在Maven項目配置pom.xml指定JDK版本和編碼

    如何在Maven項目配置pom.xml指定JDK版本和編碼

    maven是個項目管理工具,如果我們不告訴它要使用什么樣的jdk版本編譯,它就會用maven-compiler-plugin默認(rèn)的jdk版本來處理,這樣就容易出現(xiàn)版本不匹配的問題,這篇文章主要給大家介紹了關(guān)于如何在Maven項目配置pom.xml指定JDK版本和編碼的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • spring boot動態(tài)加載Echart餅狀圖

    spring boot動態(tài)加載Echart餅狀圖

    這篇文章主要為大家詳細(xì)介紹了spring boot動態(tài)加載Echart餅狀圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • Java中的線程安全及其實現(xiàn)方式

    Java中的線程安全及其實現(xiàn)方式

    在多線程編程中,線程安全是一個非常重要的概念,線程安全指的是當(dāng)多個線程同時訪問某個共享資源時,程序的行為仍然是正確的,不會出現(xiàn)數(shù)據(jù)不一致或其他不可預(yù)見的錯誤,本文將詳細(xì)介紹什么是線程安全,以及如何在Java中實現(xiàn)線程安全,需要的朋友可以參考下
    2025-02-02
  • 深入探索Java常量池

    深入探索Java常量池

    這篇文章主要介紹了深入探索Java常量池,涉及靜態(tài)常量池和運行時常量池的介紹,常量池的好處,8種基本數(shù)據(jù)類型的包裝類和常量池等相關(guān)內(nèi)容,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • selenium操作隱藏的元素(python+Java)

    selenium操作隱藏的元素(python+Java)

    這篇文章主要介紹了selenium操作隱藏的元素(python+Java),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 詳解Spring boot Admin 使用eureka監(jiān)控服務(wù)

    詳解Spring boot Admin 使用eureka監(jiān)控服務(wù)

    本篇文章主要介紹了詳解Spring boot Admin 使用eureka監(jiān)控服務(wù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12

最新評論

嘉祥县| 连城县| 闻喜县| 兰坪| 桃源县| 石林| 屯留县| 兴化市| 南城县| 娄底市| 轮台县| 满洲里市| 泰安市| 财经| 高雄县| 巴马| 通州区| 广河县| 布尔津县| 北辰区| 夏邑县| 连江县| 杭锦旗| 福海县| 阳朔县| 祁阳县| 郯城县| 股票| 鄯善县| 宜兰县| 大宁县| 武山县| 富平县| 祁阳县| 北海市| 阿勒泰市| 三明市| 岳西县| 施秉县| 乾安县| 高淳县|