泛型簡介
先拿一個例子來說明泛型是什麼。
有兩個類別如下,要建構兩個類別的對象,並列印出各自的成員x。
public class StringFoo {
private String x;
public String getX() {
this.x = x;
}
}
public class DoubleFoo {
private Double x;
public Double getX() {
return x;
this.x = x;
}
}
如果Integer、Long、Date等類型的操作,還要寫相應的類,實在無聊之極。
因此,對上面的兩個類別進行重構,寫成一個類,考慮如下:
上面的類別中,成員和方法的邏輯都一樣,就是類型不一樣。 Object是所有類別的父類,因此可以考慮用Object做為成員類型,這樣就可以實現通用了。
public class ObjectFoo {
private Object x;
public Object getX() {
this.x = x;
}
}
所呼叫的程式碼如下:
public class ObjectFooDemo {
public static void main(String args[]) {
;
ObjectFoo douFoo = new ObjectFoo();
douFoo .setX(new Double("33"));
ObjectFoo objFoo = new ObjectFoo();
String str = (String)strFoo.getX();
Double d = (Double)douFoo.getX();
Object obj = objFoo.getX();
System.out.println("douFoo.getX=" + d);
System.out.println("strFoo.getX=" + obj);
}
}
以上,且沒有泛型的情況下,我們所寫的基礎聲明,然後將值傳入,取出時要進行強制型別轉換。
JDK 從1.5 開始引入了泛型的概念,來優雅解決這類問題。採用泛型技術,寫的程式碼如下:
public class GenericsFoo
private T x;
public T getX() { public void setX(T x) {
this.x = x;
}
}
所呼叫的程式碼如下:
public class GenericsFooDemo {
public static void main(String args[
public static void main(String args[])[ oo
strFoo.setX ("Hello Generics!");
GenericsFoo
objFoo=new GenericsFoo