亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java?泛型超詳細入門講解

 更新時間:2022年04月02日 15:55:21   作者:Scintillator.?/  
這篇文章主要介紹了Java基礎泛型詳情,泛型是JDK5中引入的特性,它提供了編譯時類型安全檢測機制,該機制允許在編譯時檢測到非法的類型,下面文章的詳細介紹,需要的朋友可以參考一下

1、什么是泛型?

泛型其實就是將類型作為參數(shù)傳遞,泛型允許程序員在編寫代碼時使用一些以后才指定的類型 ,在實例化該類時將想要的類型作為參數(shù)傳遞,來指明這些類型。

為什么要引入泛型?

例如:自己實現(xiàn)一個順序表

public class MyArrayList {
    public int[] elem;
    public int usedSize;

    public MyArrayList() {
        this.elem = new int[10];
    }
    // add方法
    public void add(int val) {
        // 暫時不考慮擴容問題,這里只是為了講泛型
        elem[usedSize++] = val;
    }
    // get方法
    public int get(int pos) {
        return elem[pos];
    }
}

這里可以看出,在使用上面這個自定義的順序表時,我們只能添加 int 類型的元素,我們知道java集合中的順序表,可以添加任何類型的數(shù)據(jù),怎么實現(xiàn)的呢?這里我們先嘗試將 int 類型變?yōu)镺bject類型,這樣就可以保證能傳入任何類型。

public class MyArrayList {
    public Object[] elem;
    public int usedSize;

    public MyArrayList() {
        this.elem = new Object[10];
    }
    // add方法
    public void add(Object val) {
        // 暫時不考慮擴容問題,這里只是為了講泛型
        elem[usedSize++] = val;
    }
    // get方法
    public Object get(int pos) {
        return elem[pos];
    }
}

main方法中往對象中添加數(shù)據(jù)時,可以添加任意類型的數(shù)據(jù)。但是,當需要取出數(shù)據(jù)時,因為返回的是Object類型,需要進行強轉(zhuǎn)才能用相對應的類型來接收,非常麻煩。

public static void main(String[] args) {
        MyArrayList myArrayList = new MyArrayList();
        myArrayList.add(1);
        myArrayList.add("hello");
        int array1 = (int)myArrayList.get(0);
        String array2 = (String)myArrayList.get(1);
    }

所以問題來了,難道每次都要強轉(zhuǎn)一下才能接收嗎,能否不強轉(zhuǎn)呢?這時候我們就想到在創(chuàng)建一個實例對象時,可以將想要的類型作為參數(shù)傳遞,讓這個對象中全部存?zhèn)魅氲念愋偷臄?shù)據(jù),那么拿出來的時候,就可以明確該對象中所有的數(shù)據(jù)都是該類型,不需要強轉(zhuǎn)了。這就引入了泛型。

public class MyArrayList<E> {
	// 在編寫程序時,不指定具體的類型,而用<E>這里的E來暫時代替
    // 具體的類型在實例化對象時傳入
    public E[] elem;
    public int usedSize;

    public MyArrayList() {
    	// 這里的寫法不是特別準確,應該用反射機制,這里先這樣寫
        this.elem = (E[])new Object[10];
    }
    // add方法
    public void add(E val) {
        // 暫時不考慮擴容問題,這里只是為了講泛型
        elem[usedSize++] = val;
    }
    // get方法
    public E get(int pos) {
        return elem[pos];
    }
}
public static void main(String[] args) {

        MyArrayList<Integer> myArrayList1 = new MyArrayList<>();
        myArrayList1.add(1);
        myArrayList1.add(3);
        // myArrayList1.add("world");// 這里會報錯,因為傳入的數(shù)據(jù)不是指定的類型,所以泛型還有自動對類型進行檢查的作用
        int I1 = myArrayList1.get(0);
        
        MyArrayList<String> myArrayList2 = new MyArrayList<>();
        myArrayList2.add("hello");
        myArrayList2.add("world");
        String s1 = myArrayList2.get(0);
    }

這樣就保證了能傳入任何類型的數(shù)據(jù),同時在拿出時也不需要強轉(zhuǎn)!

泛型的意義:

1、自動對類型進行檢查

2、自動對類型進行強制類型轉(zhuǎn)換

那么這里MyArrayList對應對象的類型是什么呢?是MyArrayList< Integer > 之類的嗎?

在這里插入圖片描述

這里可以看出,實例創(chuàng)建的對象他的類型都是MyArrayList,而<>中的內(nèi)容不參與泛型類型的組成,那么<>里面的類型哪里去了呢?這就要了解泛型的工作機制了。

2、泛型是怎么編譯的

數(shù)組和泛型之間的一個重要區(qū)別是它們?nèi)绾螐娭祁愋蜋z查。具體來說,數(shù)組在運行時存儲和檢查類型信息。但是,泛型在編譯時檢查類型錯誤,并且在運行時沒有類型信息。

泛型的編譯機制:擦除機制

在編譯時,將 MyArrayList 中的 E 擦成了 Object 類型。

請?zhí)砑訄D片描述

在main方法中都擦成了 MyArrayList 類型。

請?zhí)砑訄D片描述

參考: 在java中創(chuàng)建泛型數(shù)組

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

相關文章

  • Java實現(xiàn)調(diào)用對方http接口得到返回數(shù)據(jù)

    Java實現(xiàn)調(diào)用對方http接口得到返回數(shù)據(jù)

    這篇文章主要介紹了Java實現(xiàn)調(diào)用對方http接口得到返回數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 利用ScriptEngineManager實現(xiàn)字符串公式靈活計算的方法

    利用ScriptEngineManager實現(xiàn)字符串公式靈活計算的方法

    今天小編就為大家分享一篇利用ScriptEngineManager實現(xiàn)字符串公式靈活計算的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • java返回json請求中文變成問號的問題及解決

    java返回json請求中文變成問號的問題及解決

    這篇文章主要介紹了java返回json請求中文變成問號的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 如何使用RequestHeaders添加自定義參數(shù)

    如何使用RequestHeaders添加自定義參數(shù)

    這篇文章主要介紹了使用RequestHeaders添加自定義參數(shù)方式,具有很好的參考價值,希望對大家有所幫助。
    2022-02-02
  • java 查找list中重復數(shù)據(jù)實例詳解

    java 查找list中重復數(shù)據(jù)實例詳解

    這篇文章主要介紹了java 查找list中重復數(shù)據(jù)實例詳解的相關資料,需要的朋友可以參考下
    2017-01-01
  • 關于Java中static關鍵字的用法

    關于Java中static關鍵字的用法

    這篇文章主要介紹了關于Java中static關鍵字的用法,static:意為靜態(tài)的,在?Java?里面作為靜態(tài)修飾符,可以理解為全局的意思,static?不僅可以修飾成員變量,成員方法,還可以修飾代碼塊,需要的朋友可以參考下
    2023-08-08
  • TKmybatis的框架介紹和原理解析

    TKmybatis的框架介紹和原理解析

    tkmybatis是在mybatis框架的基礎上提供了很多工具,讓開發(fā)更加高效,下面來看看這個框架的基本使用,后面會對相關源碼進行分析,感興趣的同學可以看一下,挺不錯的一個工具
    2020-12-12
  • Mybatis傳參為逗號分隔的字符串情形進行in條件查詢方式

    Mybatis傳參為逗號分隔的字符串情形進行in條件查詢方式

    這篇文章主要介紹了Mybatis傳參為逗號分隔的字符串情形進行in條件查詢方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java帶default方法接口的應用示例

    Java帶default方法接口的應用示例

    這篇文章主要介紹了Java帶default方法接口的應用,結(jié)合實例形式分析了java帶default方法接口定義、用法及相關操作注意事項,需要的朋友可以參考下
    2019-08-08
  • java封裝實例用法講解

    java封裝實例用法講解

    在本篇文章里小編給大家整理了一篇關于java封裝實例用法及相關知識點,有興趣的朋友們可以參考下。
    2021-01-01

最新評論