一、泛型概述
1、背景
在java中增加泛型之前,泛型程序設(shè)計使用繼承來實現(xiàn)的。
壞處:
需要進行強制類型轉(zhuǎn)換
可向集合中添加任意類型的對象,存在風(fēng)險
2、泛型的使用
1
|
list<string> list= new arraylist<string>(); |
3、多態(tài)與泛型
1
2
3
|
class animal{} class cat extends animal{} list<animal> list= new arraylist<cat>(); //這是不允許的,變量聲明的類型必須匹配傳遞給實際對象的類型。 |
其它錯誤的例子:
1
2
|
list<object> list= new arraylist<string>(); list<number> number= new arraylist<integer>(); |
4、泛型內(nèi)容
- 泛型作為方法參數(shù)
- 自定義泛型類
- 自定義泛型方法
二、泛型作為方法參數(shù)
泛型作為參數(shù)時,如果參數(shù)為多個子類,可以使用(list<? extends 父類> xxx)。這種情況下,在調(diào)用方法時,就可以傳遞父類及其子類作為參數(shù)了。
還有一個:(list<? super 類> xxx)。這種情況下是指類及其超類(父類)。
三、自定義泛型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
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; } //測試 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()); } } |
泛型類的定義和使用,可以傳進不同類的對象作為參數(shù)
四、自定義泛型方法
1
2
3
|
public <t extends number> void printvalue(t t) { system.out.println(t); } |
注意:
- 泛型方法不一定在泛型類里面
- <t>必須寫在修飾符和返回值類型之間。
五、泛型總結(jié)
1、為什么使用泛型
不用進行強制類型轉(zhuǎn)換,避免運行時異常的安全隱患
2、變量聲明的類型必須匹配傳遞給實際對象的類型。
3、泛型作為方法參數(shù)
1
|
public void sellgoods(list<? extends goods> goods) |
表示可以是goods及goods類的子類作為泛型的參數(shù)類型,extends后面除了跟類的名字,還可以跟接口的名字。
4、public void sellgoods(list<? super goods> goods)
表示可以是goods類以及其超類作為泛型的參數(shù)類型
5、自定義泛型類
6、自定義泛型方法
以上所述是小編給大家介紹的java常用工具類—泛型詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對服務(wù)器之家網(wǎng)站的支持!
原文鏈接:https://blog.csdn.net/zhty88668/article/details/88655535