泛型的介紹
泛型:JDK 1.5版本以後出現新特性。用於解決安全問題,是一個類型安全機制
例子:ArrayList al = new ArrayList( );
好處:①將運行時期出現問題ClassCastException,轉移到了編譯時期,方便於程序猿解決問題。讓運行時期問題減少、安全
②避免了強制轉換麻煩(在1.5之前的迭代器Iterator獲取下一個元素的時候不用再進行類型的轉換)
泛型格式:通過<>來定義要操作的引用數據類型
在使用java提供的對象時,什麼時候使用泛型???通常在集合框架中很常見,只要見到< >就要定義泛型
其實< >就是用來接收類型的,當使用集合時,將集合中要存儲的數據類型作爲參數傳遞到< >中即可
什麼時候定義泛型類??????
當要操作的引用數據類型不確定的時候,早期定義Object來完成擴展。現在定義泛型來擴展
①泛型可以定義在類上
當泛型定義在類上時,在該類中的方法則只能接受此種泛型的數據類型。
定義一個工具類,供多個類型對象的使用
class Tools<QQ>{ //此處的泛型中的QQ是傳入的對象類型
private QQ q ;
public void setObject(QQ q){
this.q = q ;
}
public QQ getObject( ){
return q ;
}
}
②泛型除了可以定義在類上,泛型還可以定義在方法上
在方法上通過<>聲明其是泛型方法,根據傳入的數據類型動態的確定泛型的類型,並且此數據的類型確定的泛型只在本方法有效,當傳入下一個不同類型的數據時,其泛型又改變爲跟後一個數據類型相同的泛型類型。
例子:
public class FanXingFangFa {
public static void main(String[] args) {
Demo d = new Demo();
d.show("haha");
d.show(45);
d.print("嘿嘿");
d.print(new Integer(13));
}
}
class Demo{
public <T> void show(T t){ //此處的<T>指此方法接受的泛型,只在本方法內有效
System.out.println("show:" + t);
}
public <Q> void print(Q q){ //此處的<Q>指此方法接受的泛型,只在本方法內有效
System.out.println("print:" + q);
}
}
打印結果如下:
③在類上定義泛型,然後在這個類中的部分方法上可以定義其他的泛型,沒有定義泛型的方法則默認接受的數據類型是類定義的泛型類型,而定義了自己泛型的方法則可以根據每次調用該方法時傳入的不同數據類型去確定方法的泛型
特殊之處:存在於定義了泛型的類中的靜態方法不可以訪問類上定義的泛型,如果靜態方法操作的應用數據類型不確定,可以將泛型定義在方法上
注意:泛型定義在方法上的時候將泛型 “<>” 放在方法返回值的前面,放在修飾符的後面
public static void method(W w){ }
public static void printColl(ArrayList