java簡(jiǎn)明例舉講解泛型
什么是泛型
早期的Object類型可以接收任意的對(duì)象類型,但是在實(shí)際的使用中, 會(huì)有類型轉(zhuǎn)換的問題。也就存在這隱患,所以Java提供了泛型來解決這個(gè)安全問題
泛型,即“參數(shù)化類型”。一提到參數(shù),最熟悉的就是定義方法時(shí)有形參,然后調(diào)用此方法時(shí)傳
遞實(shí)參。就是說 , 我們可以將類型向參數(shù)一樣傳遞過去
//一個(gè)泛型類
//T可以為任意字符,如A,a,B等都可以
public class Demo1<T> {
private T num;
public Demo1() {}
public Demo1(T num) {
this.num = num;
}
public void setNum(T num) {
this.num = num;
}
public static void main(String[] args) {
Demo1<Integer> demo1 = new Demo1<>(101);
}
}如上 , 實(shí)際傳入時(shí)需指明傳入的實(shí)際類型 , 此處為Integer(泛型不能為int等基本類型,只能為引用類型) , 如果不指明則默認(rèn)為object型
當(dāng)然也可以定義多個(gè)泛型
public class Demo1<T,A> { } 泛型類與接口派生子類
此處我們定義一個(gè)Demo2類繼承上面的Demo1 類

可以看到 ,這樣顯然是不行的 , 那么此處有兩種解決辦法
1. 指明父類泛型的具體類型 ,如 :
public class Demo2 extends Demo1<Integer>{
}2. 子類也是泛型類, 如 :
public class Demo2<T> extends Demo1<T>{
}子類也是泛型類,子類和父類的泛型類型要一致
子類不是泛型類,父類要明確泛型的數(shù)據(jù)類型
泛型接口與泛型類的定義及使用基本相同。
泛型通配符
相信很多人都見過這種寫法

? 是什么意思呢 , 接著我們來解釋
? 代表類型通配符 , 代表傳入實(shí)參時(shí) , 可以傳入為任意類型
例如, 上述demo1 中 new對(duì)象也可以這樣寫
Demo1<?> demo1 = new Demo1<>(101);
? 只能代表傳入的具體實(shí)參 , 類上面的是形參,所以?只能具體傳入時(shí)使用, ? 表示實(shí)際傳入的參數(shù)類型可以是任意的
類型通配符上限 :
類/接口<?extends 實(shí)參類型>
// ? extends Number
public static void method(Demo1<? extends Number> demo1){
}
public static void main(String[] args) {
method(new Demo1<Integer>());
}如上 , 我們?cè)趍ethod() 中傳入的參數(shù)是上述定義的Demo1類類型 , ? extends Number的意思就是說我們實(shí)際傳入的類型上限是 Number , 也就是說, 只有Number 和 Number的子類(此處傳入為Integer , Number是Integer的父類)被實(shí)際傳入才是合法的
類型通配符下限 :
類/ 接口 < ? super 實(shí)參類型 >
了解了上限 , 那么下限這里也就不難理解了 , 就是傳入的必須是 自己或者自己的父類
public static void method1(Demo1<? super Number> demo1){
}
public static void main(String[] args) {
method1(new Demo1<Object>());
}此處必須傳入Number 或者 Number的父類 (此處傳入為Object類)
類型擦除
泛型是Java 1.5版本才引進(jìn)的概念,在這之前是沒有泛型的,但是,泛型代碼能夠很 好地和之前版本的代碼兼容。那是因?yàn)?,泛到信息只存在于代碼編譯階段,在進(jìn)入JVM之前,與泛型相關(guān)的信息會(huì)被擦除掉,我們稱之為一類型擦除. 泛型類被類型擦除后,相應(yīng)的類型就被替換成 Object 類型或者上限類型.
就是說 , 泛型只存在于編譯期期間 , 真正執(zhí)行代碼的時(shí)候 , 是沒有泛型這個(gè)概念的, 它只是在編譯期對(duì)我們傳入的類型做了約束
到此這篇關(guān)于java簡(jiǎn)明例舉講解泛型的文章就介紹到這了,更多相關(guān)java泛型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java實(shí)現(xiàn)RedisTemplate操作哈希數(shù)據(jù)
RedisTemplate是Spring Data Redis提供的一個(gè)用于操作Redis的模板類,本文主要介紹了java實(shí)現(xiàn)RedisTemplate操作哈希數(shù)據(jù),具有一定的參考價(jià)值,感興趣的可以了解一下2024-09-09
Maven 打包項(xiàng)目到私服 (deploy)的配置方法
這篇文章主要介紹了Maven 打包項(xiàng)目到私服 (deploy)的配置方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
java語言描述Redis分布式鎖的正確實(shí)現(xiàn)方式
這篇文章主要介紹了java語言描述Redis分布式鎖的正確實(shí)現(xiàn)方式,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
超細(xì)講解Java調(diào)用python文件的幾種方式
有時(shí)候我們?cè)趯慾ava的時(shí)候需要調(diào)用python文件,下面這篇文章主要給大家介紹了關(guān)于Java調(diào)用python文件的幾種方式,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
Spring測(cè)試基本的控制器實(shí)戰(zhàn)示例
這篇文章主要為大家介紹了Spring測(cè)試基本的控制器實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Java實(shí)現(xiàn)優(yōu)雅停止線程的有效方法詳解
這篇文章主要為大家詳細(xì)如何安全有效停止 Java 線程的,確保多線程應(yīng)用程序平穩(wěn)運(yùn)行并實(shí)現(xiàn)最佳資源管理,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
mybatis分割字符串并循環(huán),實(shí)現(xiàn)in多個(gè)參數(shù)的操作
這篇文章主要介紹了mybatis分割字符串并循環(huán),實(shí)現(xiàn)in多個(gè)參數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
struts中動(dòng)態(tài)方法調(diào)用使用通配符
這篇文章主要介紹了struts中動(dòng)態(tài)方法調(diào)用使用通配符的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-09-09

