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

Java中泛型的使用和優(yōu)點(diǎn)解析

 更新時(shí)間:2023年09月21日 09:57:22   作者:C陳三歲  
這篇文章主要介紹了Java中泛型的使用和優(yōu)點(diǎn)解析,泛型使用過程中,操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù),這種參數(shù)類型可以用在類、接口和方法中,分別被稱為泛型類、泛型接口、泛型方法,需要的朋友可以參考下

1. 泛型概述

什么是泛型,為什么要用泛型?

泛型,即“參數(shù)化類型”。一提到參數(shù),最熟悉的就是定義方法時(shí)有形參,然后調(diào)用此方法時(shí)傳遞實(shí)參。那么參數(shù)化類型怎么理解呢?顧名思義,就是將類型由原來的具體的類型參數(shù)化,類似于方法中的變量參數(shù),此時(shí)類型也定義成參數(shù)形式(可以稱之為類型形參),然后在使用/調(diào)用時(shí)傳入具體的類型(類型實(shí)參)。

泛型的本質(zhì)是為了參數(shù)化類型(在不創(chuàng)建新的類型的情況下,通過泛型指定的不同類型來控制形參具體限制的類型)。也就是說在泛型使用過程中,操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù),這種參數(shù)類型可以用在類、接口和方法中,分別被稱為泛型類、泛型接口、泛型方法。

2. 泛型舉例

List arrayList = new ArrayList();
arrayList.add("aaaa");
arrayList.add(100);
for(int i = 0; i< arrayList.size();i++){
    String item = (String)arrayList.get(i);
}

這段代碼是不能執(zhí)行的,原因也很簡單,100并不是字符串,無法強(qiáng)轉(zhuǎn)輸出,那如何避免這中問題呢?答案很簡單,采用  泛型  。

List arrayList = new ArrayList<String>();

這樣的話,我們的arrayList中就只能存儲String類型的數(shù)據(jù)。

3. 泛型的優(yōu)點(diǎn)

  • 編譯時(shí),檢查添加元素的類型,提高了安全性。
  • 減少了類型轉(zhuǎn)換的次數(shù),提高效率。
  • 不再提示編譯警告

4. 泛型介紹

  1. 泛型又稱參數(shù)化類型,是jdk5.0出現(xiàn)的新特性,解決數(shù)據(jù)類型的安全性問題。
  2. 在類聲明或?qū)嵗瘯r(shí)只要指定好需要的具體的類型即可。
  3. Java泛型可以保證如果程序在編譯時(shí)沒有發(fā)出警告,運(yùn)行時(shí)就不會產(chǎn)生ClassCastException 異常,同時(shí)代碼更加簡潔,健壯。
  4. 泛型的作用是:可以在類聲明時(shí)通過一個(gè)標(biāo)識表示類中某個(gè)屬性的類型,或者是某個(gè)方法的返回值的類型,或者是參數(shù)類型。

5. 泛型的語法

interface 接口<T>{
 } 和 class 類<k,v>{
 }

說明

  • 其中,T,K,V不代表值,而是表示類型。
  • 任意字母都可以。常用T表示,是Type的縮寫。

6. 泛型使用

6.1 簡單了解

class Person<E> {
    	E s ;//E 表示 s 的數(shù)據(jù)類型, 該數(shù)據(jù)類型在定義 Person 對象的時(shí)候指定,即在編譯期間,就確定 E 是什么類型
    	public Person(E s) {
 //E 也可以是參數(shù)類型
    	this.s = s;
    }
    	public E f() {
 //返回類型使用 E
    	return s;
    }
   	 	public void show() {
    	System.out.println(s.getClass());//顯示 s 的運(yùn)行類型
    }
}

我們實(shí)例化一個(gè)Person對象

Person person = new Person(“要開學(xué)了”);

對比下面理解

class Person {
		String s ;//E 表示 s 的數(shù)據(jù)類型, 該數(shù)據(jù)類型在定義 Person 對象的時(shí)候指定,即在編譯期間,就確定 E是什么類型
		public Person(String s) {
 //E 也可以是參數(shù)類型
		this.s = s;
	}
		public String f() {
 //返回類型使用 E
		return s;
	}
}

6.2 進(jìn)一步了解

泛型的實(shí)例化

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

List<String> list = new ArrayList<String>();
Iterator<Customer> iterator = customer.iterator();

實(shí)例化舉例

使用泛型方式給 HashSet 放入 3 個(gè)學(xué)生對象

HashSet<Student> students = new HashSet<Student>();
students.add(new Student("jack", 18));
students.add(new Student("tom", 28));
students.add(new Student("mary", 19));
//遍歷
for (Student student : students) {
System.out.println(student);
}

使用泛型方式給 HashMap 放入 3 個(gè)學(xué)生對象

//使用泛型方式給 HashMap 放入 3 個(gè)學(xué)生對象
//K -> String V->Student
HashMap<String, Student> hm = new HashMap<String, Student>();
/*
public class HashMap<K,V> {}
*/
hm.put("lucy", new Student("lucy", 38));
hm.put("smith", new Student("smith", 48));
hm.put("jack", new Student("jack", 28));

6.3 泛型接口

泛型接口的使用與泛型的定義及使用基本相同

//定義一個(gè)泛型接口
public interface Generator<T> {
    public T next();
}

未傳參時(shí)

/**
 * 未傳入泛型實(shí)參時(shí),與泛型類的定義相同,在聲明類的時(shí)候,需將泛型的聲明也一起加到類中
 * 即:class FruitGenerator<T> implements Generator<T>{
 * 如果不聲明泛型,如:class FruitGenerator implements Generator<T>,編譯器會報(bào)錯(cuò):"Unknown class"
 */
class FruitGenerator<T> implements Generator<T>{
    @Override
    public T next() {
        return null;
    }
}

傳參后

/**
 * 傳入泛型實(shí)參時(shí):
 * 定義一個(gè)生產(chǎn)器實(shí)現(xiàn)這個(gè)接口,雖然我們只創(chuàng)建了一個(gè)泛型接口Generator<T>
 * 但是我們可以為T傳入無數(shù)個(gè)實(shí)參,形成無數(shù)種類型的Generator接口。
 * 在實(shí)現(xiàn)類實(shí)現(xiàn)泛型接口時(shí),如已將泛型類型傳入實(shí)參類型,則所有使用泛型的地方都要替換成傳入的實(shí)參類型
 * 即:Generator<T>,public T next();中的的T都要替換成傳入的String類型。
 */
public class FruitGenerator implements Generator<String> {
    private String[] fruits = new String[]{
 "Apple", "Banana", "Pear"};
    @Override
    public String next() {
        return fruits[1];
    }
}

7. 泛型使用的注意事項(xiàng)

  • interface List{},public class HashSet{} 等等

其中T,E只能是引用類型,主要就是int等類型要使用其包裝類例如:

List list = new ArrayList() //正確
List list = new ArrayList() //錯(cuò)誤,int不是引用類型。

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

泛型使用形式

List list1 = new ArrayList();
List list2 = new ArrayList<>();?注意,后面的泛型可以省略
List list3 = new ArrayList();

如果我們這么寫,默認(rèn)給他的泛型是Object類型

8. 結(jié)語

泛型在Java開發(fā)中非常常用,就如集合般,他倆常常是一起使用的,注意語法即可,后面寫小項(xiàng)目時(shí)自己就會用了,不需要直接就理解,后面的學(xué)習(xí)中會經(jīng)??匆姡倩剡^頭看你會發(fā)現(xiàn),泛型也就這么回事。

到此這篇關(guān)于Java中泛型的使用和優(yōu)點(diǎn)解析的文章就介紹到這了,更多相關(guān)Java的泛型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實(shí)現(xiàn)萬年歷效果

    Java實(shí)現(xiàn)萬年歷效果

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)萬年歷效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java中-Xms和-Xmx參數(shù)的使用與默認(rèn)內(nèi)存設(shè)置

    Java中-Xms和-Xmx參數(shù)的使用與默認(rèn)內(nèi)存設(shè)置

    在 Java 程序運(yùn)行時(shí),內(nèi)存的管理是影響程序性能的關(guān)鍵因素之一,Java 程序使用的內(nèi)存主要由兩部分組成:堆內(nèi)存和棧內(nèi)存,Java 提供了多個(gè)參數(shù)來控制堆內(nèi)存的大小,其中最常用的參數(shù)是 -Xms 和 -Xmx,本文將詳細(xì)介紹這些參數(shù),需要的朋友可以參考下
    2024-11-11
  • 詳解如何把Java中if-else代碼重構(gòu)成高質(zhì)量代碼

    詳解如何把Java中if-else代碼重構(gòu)成高質(zhì)量代碼

    這篇文章主要介紹了詳解如何把Java中if-else代碼重構(gòu)成高質(zhì)量代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java編寫實(shí)現(xiàn)窗體程序顯示日歷

    Java編寫實(shí)現(xiàn)窗體程序顯示日歷

    這篇文章主要為大家詳細(xì)介紹了Java編寫實(shí)現(xiàn)窗體程序顯示日歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 在Spring Boot中實(shí)現(xiàn)多環(huán)境配置的方法

    在Spring Boot中實(shí)現(xiàn)多環(huán)境配置的方法

    在SpringBoot中,實(shí)現(xiàn)多環(huán)境配置是一項(xiàng)重要且常用的功能,它允許開發(fā)者為不同的運(yùn)行環(huán)境,這種方式簡化了環(huán)境切換的復(fù)雜度,提高了項(xiàng)目的可維護(hù)性和靈活性,本文給大家介紹在Spring Boot中實(shí)現(xiàn)多環(huán)境配置的方法,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • Spring boot配置文件加解密詳解

    Spring boot配置文件加解密詳解

    這篇文章主要給大家介紹了關(guān)于Spring boot配置文件加解密的相關(guān)資料,文中通過示例代碼以及圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Java中Steam流的用法詳解

    Java中Steam流的用法詳解

    Stream是Java?8?API添加的一個(gè)新的抽象,稱為流Stream,本文主要介紹了Java中Steam流的用法詳解,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-04-04
  • java多線程編程之join方法的使用示例

    java多線程編程之join方法的使用示例

    join方法的功能就是使異步執(zhí)行的線程變成同步執(zhí)行。也就是說,當(dāng)調(diào)用線程實(shí)例的start方法后,這個(gè)方法會立即返回,如果在調(diào)用start方法后后需要使用一個(gè)由這個(gè)線程計(jì)算得到的值,就必須使用join方法
    2014-01-01
  • java 中單例模式餓漢式與懶漢式的對比

    java 中單例模式餓漢式與懶漢式的對比

    這篇文章主要介紹了java 中單例模式餓漢式與懶漢式的對比的相關(guān)資料,這里對這兩種單例模式進(jìn)行對比,希望大家能理解并應(yīng)用,需要的朋友可以參考下
    2017-08-08
  • Java POI實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出通用方法與樣式處理

    Java POI實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出通用方法與樣式處理

    Apache POI庫是Java領(lǐng)域處理Microsoft Office文件的關(guān)鍵工具,該項(xiàng)目使用POI 3.17版本實(shí)現(xiàn)Excel文件的讀寫功能,本文介紹Excel導(dǎo)入導(dǎo)出的步驟以及如何添加和維護(hù)樣式,包括字體、顏色、邊框和對齊等,需要的朋友可以參考下
    2025-08-08

最新評論

鄂尔多斯市| 获嘉县| 温州市| 肇东市| 贵南县| 五河县| 宜宾县| 乐平市| 简阳市| 谢通门县| 黄梅县| 台中市| 横山县| 建湖县| 南昌市| 杨浦区| 兰西县| 巴林左旗| 石城县| 汪清县| 永安市| 四子王旗| 贵州省| 剑阁县| 丹棱县| 荆门市| 凤阳县| 会昌县| 定南县| 逊克县| 腾冲县| 龙岩市| 富宁县| 广饶县| 通化县| 大关县| 奈曼旗| 宜黄县| 崇信县| 苍梧县| 乌苏市|