Java泛型的基本應(yīng)用
一、泛型概述
jdk1.5版本以后出現(xiàn)的新特性,用于解決安全問題,是一個(gè)安全機(jī)制。
好處:
1,將運(yùn)行時(shí)期的問題ClassCastException轉(zhuǎn)到了編譯時(shí)期。
2,避免了強(qiáng)制轉(zhuǎn)換的麻煩。
什么時(shí)候用:
當(dāng)操作的引用數(shù)據(jù)類型不確定的時(shí)候。就使用泛型(<>)。將要操作的引用數(shù)據(jù)類型傳入即可,其實(shí)<>就是一個(gè)用于接收具體引用數(shù)據(jù)類型的參數(shù)范圍。
在程序中,只要用到了帶有<>的類或者接口,就要明確傳入的具體引用數(shù)據(jù)類型。
泛型技術(shù)是給編譯器使用的技術(shù),用于編譯時(shí)期。確保了類型的安全。
運(yùn)行時(shí),會(huì)將泛型去掉,生成的class文件中是不帶泛型的,這個(gè)稱為泛型的擦除。
泛型的通配符:未知類型。
二、泛型的使用
import java.util.*; publicclass GenericDefineDemo4 { publicstaticvoid main(String[] args) { ArrayList<String> arr=new ArrayList<String>(); arr.add("java01"); arr.add("java02"); arr.add("java03"); arr.add("java04"); Iterator<String> it=arr.iterator(); while(it.hasNext()) { System.out.println(it.next()); } } } |
三、泛型類
1、格式
class ClassName<datatype>
{
}
2、優(yōu)點(diǎn)
便于對(duì)任何未知的的數(shù)據(jù)類型進(jìn)行操作,特別適合用作工具類,避免了強(qiáng)制類型轉(zhuǎn)換的麻煩。
3.示例
import java.util.*; publicclass GenericClass { publicstaticvoid main(String[] args) { Tools<String> tools=new Tools<String>("hello"); System.out.println(tools.getObj()); } } class Tools<T> { private T obj; public Tools(T t) { this.obj=t; } public T getObj() { returnobj; } publicvoid setObj(T obj) { this.obj = obj; } } |
四、泛型方法
當(dāng)只需要某一個(gè)方法可以接收不同類型的參數(shù),而不是整個(gè)類的時(shí)候,就可以用到泛型方法,它將大大提高程序代碼的擴(kuò)展性。
示例代碼如下:
import java.util.*; publicclass GenericMethod { publicstaticvoid main(String[] args) { String s="hello!Nice to meet you!"; Integer inter=3; Show show=new Show(); show.print(s); show.print(inter); } } class Show { public <Q> void print(Q q) { System.out.println(q); } } |
五、靜態(tài)泛型方法
1、格式
public static <T> methodName(T param)
{
}
2、特點(diǎn)
由于靜態(tài)方法不可以訪問類中的泛型,如果靜態(tài)方法操作的類型不確定,這可以把泛型定義在靜態(tài)方法上。
3、示例
publicstatic <Q> void print(Q q)
{
System.out.println(q);
}
六、泛型接口
1、格式
interface Inter<T>
{
void show(T t);
}
2、特點(diǎn)
當(dāng)接口要操作的數(shù)據(jù)類型不確定的時(shí)候,就可以使用泛型接口。
注意:
當(dāng)實(shí)現(xiàn)接口的類已經(jīng)確定了接口具體的類型時(shí),創(chuàng)建對(duì)象時(shí)就不用再指明類型了,如:
class InterImpl implements Inter<String>
{
}
如果實(shí)現(xiàn)類仍不知道具體的類型,就要?jiǎng)?chuàng)建對(duì)象時(shí)指明,如:
class InterImpl<T> implements Inter<T>
{
}
InterImpl<String> im=new InterImpl<String>();
3、示例
import java.util.*; public class Test { public static void main(String[] args) { InterImpl<String> im=new InterImpl<String>(); im.print("hello"); } } interface Inter<T> { void print(T t); } class InterImpl<T> implements Inter<T> { public void print(T s) { System.out.println(s); } } |
七、泛型extends限定
extends E:接收E類型或者E的子類型對(duì)象。上限
一般存儲(chǔ)對(duì)象的時(shí)候用。比如添加元素 addAll.
八、泛型super限定
super E:接收E類型或者E的父類型對(duì)象。下限。
一般取出對(duì)象的時(shí)候用。比如比較器。
posted on 2014-03-26 11:11 順其自然EVO 閱讀(275) 評(píng)論(0) 編輯 收藏 所屬分類: 測(cè)試學(xué)習(xí)專欄