?泛型的運(yùn)用:
? 需求:
? ???????? 定義一個(gè)方法,可以接受任意數(shù)據(jù)類型,而且要求返回的數(shù)據(jù)類型,就是你傳入的數(shù)據(jù)類型
? 例如:
????? ???? 傳入String,返回String
? ???? ???? 傳入Demo3類型,返回Demo3類型
? 泛型:
? ???????? 占位符!??!<一個(gè)大寫字母>,只是一個(gè)占位符,沒有實(shí)際含義,而且不同地方定義的占位符沒有聯(lián)系
? 泛型在函數(shù)中使用的格式
? 修飾符 <聲明的自定義泛型占位符> 返回值類型(可以使用自定泛型) 函數(shù)名(形式參數(shù)列表"也可以使用泛型") {
? 函數(shù)體
? 在函數(shù)體中,所有用到自定義泛型的地方,都可以被替換
? }
? 包裝類
? Java是完全面向?qū)ο蟮恼Z(yǔ)言,在Java中萬(wàn)物皆對(duì)象,如果是要保存類對(duì)象,那么8大基本數(shù)據(jù)類型就無法使用所以,Java提供了一個(gè)包裝機(jī)制,包裝基本數(shù)據(jù)類型,讓他們變成類對(duì)象,
? 自動(dòng)封箱
? Integer -> int
? Byte -> byte
? Long -> long
? Short -> short
? Double -> double
? Float -> float
? Boolean -> boolean
? Character -> char
? 如果使用包裝類直接賦值給普通的基本數(shù)據(jù)類型,這個(gè)操作稱之為 拆箱
在類內(nèi)使用泛型
格式:
class 類名<自定義泛型的占位符> {
//在這里所用到的泛型和用戶創(chuàng)建對(duì)象時(shí)聲明的一致
}
注意事項(xiàng):
1. 一個(gè)類聲明的自定義泛型,如果在創(chuàng)建該類對(duì)象時(shí),確定了泛型的具體數(shù)據(jù)類型,那么
在整個(gè)類內(nèi)所有用到該泛型占位符的非靜態(tài)成員方法,使用的數(shù)據(jù)類型都是創(chuàng)建時(shí)確定的類型
2. 如果創(chuàng)建使用了自定義泛型類對(duì)象,但是沒有確定泛型的具體類型,那么編譯器會(huì)把這個(gè)
泛型認(rèn)為是Object類型
3. 類中聲明的自定義泛型,不能對(duì)類內(nèi)的靜態(tài)方法使用,如果想讓靜態(tài)方法使用泛型, 自?shī)首詷?/p>
自己聲明,自己使用,類似方法中使用泛型
4. 建議:如果在代碼中出現(xiàn)了多個(gè)使用不同泛型的地方,請(qǐng)使用不同的名字?T E
在接口中定義泛型
格式 :
interface 接口名<自定義泛型的占位符> {
//成員變量? 缺省屬性:public static final 定義時(shí)必須初始化
//成員方法? 缺省屬性:abstract
}
兩種【遵從】帶有自定義泛型的接口方式:
1. 更加自由,需要使用的泛型類型,在創(chuàng)建對(duì)象時(shí)確定,類似ArrayList
2. 適合原本這個(gè)類就沒有使用泛型的情況,例如:一個(gè)類遵從Comparable接口
事項(xiàng)compareTo方法,這里可以在【遵從】時(shí),確定Comparable需要的泛型
具體數(shù)據(jù)類型,減少?zèng)]有必要的強(qiáng)制類型轉(zhuǎn)換
?泛型的上下限
T 泛型的占位符
? 通配符
super: 調(diào)用父類方法的關(guān)鍵字
extends: 繼承的關(guān)鍵字
需求:定義一個(gè)函數(shù)接受任意類型數(shù)值的集合,但是這個(gè)數(shù)據(jù)必須是數(shù)值類型
數(shù)值類型:Number 已知子類:Integer Short Long Double Float (包裝類)
要求傳入的對(duì)象是Number類對(duì)象或者其子類對(duì)象
Integer extends Number;
Float extends Number;
Double extends Number;
? extends Number;
這就是泛型的上限:
需求:定義一個(gè)函數(shù)能夠傳入一個(gè)任意類型的集合,但是要求集合里面保存的數(shù)據(jù)必須是Number類對(duì)象,或者其父類對(duì)象
泛型的下限
能夠保存的數(shù)據(jù)是Number類對(duì)象本身或者其父類對(duì)象