------- android培訓、java培訓、期待與您交流! ----------
在jdk1.5之後java出現了泛型,允許定義泛型類,接口,方法。
例如Comparable接口:
//在1.5之前的定義,是用Object來接受的。
public interface Comparable{
public int CompareTo(Object o)
}
//有了泛型之後:
public interface Comparable<T>
{
public int CompareTo(T t)
}
由上面可以感到泛型的區別,當然泛型的主要作用是:可以在編譯時檢測出錯誤!
1.如何定義泛型類呢?如下:
class person<T>
{
person()
{
}
public void sayhi(T t)
{
System.out.println(t+"hi");
}
}
也就是說在定義爲泛型類時候,所有類中的T都可以是使用T相應的值。要區別的是泛型方法的定義!
2.如何定義泛型接口?如下
interface person<T>
{
public void sayhi(T t);
}
· 3.如何定義泛型方法?如下
public <E> void print(E e)
{
System.out.println(e);
}
在泛型方法中要注意返回值類型前的<E>!區別於泛型類。
------------------------------------------------------------------------------
在泛型中也有許多要注意的問題:
1.當你的GenericDemo<T>爲一個泛型類的時候,你的構造方法用不用加<T>?不用!爲GenericDemo()不加泛型類型!
2.泛型可以有多個參數<E,E1,E2>
3.非受限的類型<T>和<T extends Object>一樣!
4.通配符? 可以接受任意類型!
? extends E 表示接受E類型或E的子類型!
? super E 表示接受E的父類型!
5.儘管Integer爲Object的子類型,但是GenericDemo<Integer>不是GenericDemo<Object>的子類型!
要注意的一點是什麼時候不能用泛型:
1.在靜態環境下,不可以用泛型!
2.在異常類中不可用泛型!
無論怎麼樣,都由於泛型的特殊實現方式決定的:泛型是使用一種類型消除的方法實現的!編譯器使用泛型類型信息,來編譯。但是之後消除他!因此,在運行時是沒有泛型的信息的!
在think in java中寫道:
java容器缺陷,和泛型作用:
1.對象引用加入容器的時候丟了類型信息!
2.由於丟失了類信息,所以要類型轉換,轉爲正確類型!
------- android培訓、java培訓、期待與您交流! ----------