詳解Java常用工具類(lèi)—泛型
一、泛型概述
1、背景
在Java中增加泛型之前,泛型程序設(shè)計(jì)使用繼承來(lái)實(shí)現(xiàn)的。
壞處:
需要進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換
可向集合中添加任意類(lèi)型的對(duì)象,存在風(fēng)險(xiǎn)
2、泛型的使用
List<String> list=new ArrayList<String>();
3、多態(tài)與泛型
class Animal{}
class Cat extends Animal{}
List<Animal> list=new ArrayList<Cat>(); //這是不允許的,變量聲明的類(lèi)型必須匹配傳遞給實(shí)際對(duì)象的類(lèi)型。
其它錯(cuò)誤的例子:
List<Object> list=new ArrayList<String>(); List<Number> number=new ArrayList<Integer>();
4、泛型內(nèi)容
- 泛型作為方法參數(shù)
- 自定義泛型類(lèi)
- 自定義泛型方法
二、泛型作為方法參數(shù)
泛型作為參數(shù)時(shí),如果參數(shù)為多個(gè)子類(lèi),可以使用(List<? extends 父類(lèi)> xxx)。這種情況下,在調(diào)用方法時(shí),就可以傳遞父類(lèi)及其子類(lèi)作為參數(shù)了。
還有一個(gè):(List<? super 類(lèi)> xxx)。這種情況下是指類(lèi)及其超類(lèi)(父類(lèi))。
三、自定義泛型
public class NumGeneric<T> {
private T num;
public NumGeneric() {
}
public NumGeneric(T num) {
this.setNum(num);
}
public T getNum() {
return num;
}
public void setNum(T num) {
this.num = num;
}
//測(cè)試
public static void main(String[] args) {
NumGeneric<Integer> intNum = new NumGeneric<>();
intNum.setNum(10);
System.out.println("Integer:" + intNum.getNum());
NumGeneric<Float> floatNum = new NumGeneric<>();
floatNum.setNum(5.0f);
System.out.println("Float:" + floatNum.getNum());
}
}
泛型類(lèi)的定義和使用,可以傳進(jìn)不同類(lèi)的對(duì)象作為參數(shù)
四、自定義泛型方法
public <T extends Number> void printValue(T t) {
System.out.println(t);
}
注意:
- 泛型方法不一定在泛型類(lèi)里面
- <T>必須寫(xiě)在修飾符和返回值類(lèi)型之間。
五、泛型總結(jié)
1、為什么使用泛型
不用進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換,避免運(yùn)行時(shí)異常的安全隱患
2、變量聲明的類(lèi)型必須匹配傳遞給實(shí)際對(duì)象的類(lèi)型。
3、泛型作為方法參數(shù)
public void sellGoods(List<? extends Goods> goods)
表示可以是Goods及Goods類(lèi)的子類(lèi)作為泛型的參數(shù)類(lèi)型,extends后面除了跟類(lèi)的名字,還可以跟接口的名字。
4、public void sellGoods(List<? super Goods> goods)
表示可以是Goods類(lèi)以及其超類(lèi)作為泛型的參數(shù)類(lèi)型
5、自定義泛型類(lèi)
6、自定義泛型方法
以上所述是小編給大家介紹的Java常用工具類(lèi)—泛型詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- 深入淺析Java常用的格式化Json工具類(lèi)
- Java常用工具類(lèi)庫(kù)——Hutool的使用簡(jiǎn)介
- Java常用工具類(lèi)匯總 附示例代碼
- Java常用類(lèi)庫(kù)Apache Commons工具類(lèi)說(shuō)明及使用實(shí)例詳解
- java常用工具類(lèi) Reflect反射工具類(lèi)、String字符串工具類(lèi)
- java常用工具類(lèi) Date日期、Mail郵件工具類(lèi)
- java常用工具類(lèi) UUID、Map工具類(lèi)
- java常用工具類(lèi) Random隨機(jī)數(shù)、MD5加密工具類(lèi)
- java常用工具類(lèi) 數(shù)字工具類(lèi)
- java常用工具類(lèi) XML工具類(lèi)、數(shù)據(jù)驗(yàn)證工具類(lèi)
- java常用工具類(lèi) IP、File文件工具類(lèi)
- Java常用工具類(lèi)—集合排序
- java處理字節(jié)的常用工具類(lèi)
- java自定義封裝StringUtils常用工具類(lèi)
- 常用java正則表達(dá)式的工具類(lèi)
- Java語(yǔ)言Lang包下常用的工具類(lèi)介紹
- Java_int、double型數(shù)組常用操作工具類(lèi)(分享)
- Java常用工具類(lèi)總結(jié)
相關(guān)文章
Java中Queue的poll()和remove()區(qū)別詳解
這篇文章主要介紹了Java中Queue的poll()和remove()區(qū)別詳解,Queue接口提供了許多方法,其中poll()和remove()是兩個(gè)常用的方法,它們的區(qū)別在于,當(dāng)隊(duì)列為空時(shí),poll()方法返回null,而remove()方法會(huì)拋出,需要的朋友可以參考下2023-07-07
springBoot 項(xiàng)目排除數(shù)據(jù)庫(kù)啟動(dòng)方式
這篇文章主要介紹了springBoot 項(xiàng)目排除數(shù)據(jù)庫(kù)啟動(dòng)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Java通過(guò)MyBatis框架對(duì)MySQL數(shù)據(jù)進(jìn)行增刪查改的基本方法
MyBatis框架由Java的JDBC API進(jìn)一步封裝而來(lái),在操作數(shù)據(jù)庫(kù)方面效果拔群,接下來(lái)我們就一起來(lái)看看Java通過(guò)MyBatis框架對(duì)MySQL數(shù)據(jù)進(jìn)行增刪查改的基本方法:2016-06-06
Spring Cloud Zuul路由規(guī)則動(dòng)態(tài)更新解析
這篇文章主要介紹了Spring Cloud Zuul路由規(guī)則動(dòng)態(tài)更新解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
解決阿里代碼規(guī)范檢測(cè)中方法缺少javadoc注釋的問(wèn)題
這篇文章主要介紹了解決阿里代碼規(guī)范檢測(cè)中方法缺少javadoc注釋的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08

