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

Java中泛型總結(jié)(推薦)

 更新時(shí)間:2019年03月27日 15:55:47   作者:busybox1587  
這篇文章主要介紹了Java中泛型總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Java 泛型(generics)是 JDK 5 中引入的一個(gè)新特性, 泛型提供了編譯時(shí)類型安全檢測機(jī)制,該機(jī)制允許程序員在編譯時(shí)檢測到非法的類型。
泛型的本質(zhì)是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù)。

泛型類

范例:泛型類的基本語法

class MyClass<T> {
	T value1;
}

尖括號(hào) <> 中的 T 被稱作是類型參數(shù),用于指代任何類型。實(shí)際上這個(gè)T你可以任意寫,但出于規(guī)范的目的,Java還是建議我們用單個(gè)大寫字母來代表類型參數(shù)。常見的如:

  1. T 代表一般的任何類。
  2. E 代表 Element 的意思,或者 Exception 異常的意思。
  3. K 代表 Key 的意思
  4. V 代表 Value 的意思,通常與 K 一起配合使用。
  5. S 代表 Subtype 的意思,文章后面部分會(huì)講解示意。

范例:泛型類引入多個(gè)類型參數(shù)以及使用

class MyClass<T,E> {
	T value1;
	E value2;
}
public class Test {
	public static void main(String[] args) {
		MyClass<String,Integer> myClass1 = new MyClass<String,Integer>();
	}
}

當(dāng)開發(fā)的程序可以避免向下轉(zhuǎn)型,也就意味著安全隱患被消除了。盡量不要去使用向下轉(zhuǎn)型。
泛型的出現(xiàn)徹底改變了向下轉(zhuǎn)型的需求。引入泛型后,如果明確設(shè)置了類型,則為設(shè)置類型;如果沒有設(shè)置類型,
則默認(rèn)為Object類型。

泛型方法

泛型不僅可以用于定義類,還可以單獨(dú)來定義方法。如下所示:
范例:泛型方法定義

class MyClass{
	public <T> void testMethod(T t) {
		System.out.println(t);
	}
}

 泛型方法與泛型類稍有不同的地方是,類型參數(shù)也就是尖括號(hào)那一部分是寫在返回值前面的。 中的 T 被稱為類型參數(shù),而方法中的 T 被稱為參數(shù)化類型,它不是運(yùn)行時(shí)真正的參數(shù)。

當(dāng)然,聲明的類型參數(shù),其實(shí)也是可以當(dāng)作返回值的類型的。

范例:使用類型參數(shù)做返回值的泛型方法

class MyClass{
	public <T> T testMethod(T t) {
		return t;
	}
}

在程序類中追加了泛型的定義后,避免了ClassCastException 的問題,但是又會(huì)產(chǎn)生新的情況:參數(shù)的統(tǒng)一問題。

范例:觀察程序

public class TestDemo {
	public static void main(String[] args) {
		Message<Integer> message = new Message() ;
		message.setMessage(99);
		fun(message); // 出現(xiàn)錯(cuò)誤,只能接收String
	}
	public static void fun(Message<String> temp){
		System.out.println(temp.getMessage());
	}
}

范例:使用通配符

public class TestDemo {
	public static void main(String[] args) {
		Message<Integer> message = new Message() ;
		message.setMessage(55);
		fun(message);
	}
	// 此時(shí)使用通配符"?"描述的是它可以接收任意類型,但是由于不確定類型,所以無法修改
	public static void fun(Message<?> temp){
		//temp.setMessage(100); 無法修改!
		System.out.println(temp.getMessage());
	}
}

泛型接口

泛型除了可以定義在類中,也可以定義在接口里面,這種情況我們稱之為泛型接口。

范例:定義一個(gè)泛型接口

interface IMessage<T> {
	// 在接口上定義了泛型
	public void print(T t) ;
}

范例:在子類定義時(shí)繼續(xù)使用泛型

interface IMessage<T> {
	 // 在接口上定義了泛型
	public void print(T t) ;
}
class MessageImpl<T> implements IMessage<T> {
	@Override
	public void print(T t) {
		System.out.println(t);
	}
}
public class TestDemo {
	public static void main(String[] args) {
		IMessage<String> msg = new MessageImpl() ;
		msg.print("Hello World");
	}
}

以后我們編寫的程序一定會(huì)使用泛型接口,要求大家一定要掌握。

類型擦除

泛型是 Java 1.5 版本才引進(jìn)的概念,在這之前是沒有泛型的概念的,但顯然,泛型代碼能夠很好地和之前版本的代碼很好地兼容。

這是因?yàn)?,泛型信息只存在于代碼編譯階段,在進(jìn)入 JVM 之前,與泛型相關(guān)的信息會(huì)被擦除掉,專業(yè)術(shù)語叫做類型擦除。

通俗地講,泛型類和普通類在 java 虛擬機(jī)內(nèi)是沒有什么特別的地方。

以上所述是小編給大家介紹的Java中泛型總結(jié)詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • SpringBoot使用Redis實(shí)現(xiàn)分布式鎖

    SpringBoot使用Redis實(shí)現(xiàn)分布式鎖

    這篇文章主要為大家詳細(xì)介紹了SpringBoot使用Redis實(shí)現(xiàn)分布式鎖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • java構(gòu)建OAuth2授權(quán)服務(wù)器

    java構(gòu)建OAuth2授權(quán)服務(wù)器

    本文主要介紹了java構(gòu)建OAuth2授權(quán)服務(wù)器,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • SpringBoot整合Redis的步驟

    SpringBoot整合Redis的步驟

    這篇文章主要介紹了SpringBoot整合Redis的步驟,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-11-11
  • 一次排查@CacheEvict注解失效的經(jīng)歷及解決

    一次排查@CacheEvict注解失效的經(jīng)歷及解決

    這篇文章主要介紹了一次排查@CacheEvict注解失效的經(jīng)歷及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • IDEA2023 配置使用Docker的詳細(xì)教程

    IDEA2023 配置使用Docker的詳細(xì)教程

    這篇文章主要介紹了IDEA2023 配置使用Docker的詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • 深入理解Java中的克隆

    深入理解Java中的克隆

    想必大家對克隆都有耳聞,世界上第一只克隆羊多莉就是利用細(xì)胞核移植技術(shù)將哺乳動(dòng)物的成年體細(xì)胞培育出新個(gè)體,甚為神奇。其實(shí)在Java中也存在克隆的概念,即實(shí)現(xiàn)對象的復(fù)制。本文將嘗試介紹一些關(guān)于Java中的克隆和一些深入的問題,希望可以幫助大家更好地了解克隆。
    2016-08-08
  • 詳解Java高級特性之反射

    詳解Java高級特性之反射

    這篇文章主要介紹了Java高級特性之反射的相關(guān)知識(shí),文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Java二叉樹查詢原理深入分析講解

    Java二叉樹查詢原理深入分析講解

    這篇文章主要介紹了Java二叉樹查詢原理,二叉查找樹,又稱二叉排序樹,亦稱二叉搜索樹,是數(shù)據(jù)結(jié)構(gòu)中的一類。在一般情況下,查找效率比鏈表結(jié)構(gòu)要高
    2022-11-11
  • SpringSecurity 自定義認(rèn)證登錄的項(xiàng)目實(shí)踐

    SpringSecurity 自定義認(rèn)證登錄的項(xiàng)目實(shí)踐

    本文主要介紹了SpringSecurity 自定義認(rèn)證登錄的項(xiàng)目實(shí)踐,以手機(jī)驗(yàn)證碼登錄為例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • Java?SpringTask定時(shí)自動(dòng)化處理方法

    Java?SpringTask定時(shí)自動(dòng)化處理方法

    這篇文章主要介紹了Java?SpringTask定時(shí)自動(dòng)化處理,通過自動(dòng)化,不僅可以提高工作效率和準(zhǔn)確性,還可以釋放人力資源以專注于更高價(jià)值的工作,需要的朋友可以參考下
    2024-08-08

最新評論