Java泛型--泛型入門
1、認識泛型

按照此定義格式,定義一個point類。
class Point<T>{ // 此處可以隨便寫標識符號,T是type的簡稱 private T var ; // var的類型由T指定,即:由外部指定 public T getVar(){ // 返回值的類型由外部決定 return var ; } public void setVar(T var){ // 設置的類型也由外部決定 this.var = var ; } };
class Point<T>{ // 此處可以隨便寫標識符號,T是type的簡稱 private T var ; // var的類型由T指定,即:由外部指定 public T getVar(){ // 返回值的類型由外部決定 return var ; } public void setVar(T var){ // 設置的類型也由外部決定 this.var = var ; } }; public class GenericsDemo06{ public static void main(String args[]){ Point<String> p = new Point<String>() ; // 裏麵的var類型為String類型 p.setVar("MLDN") ; // 設置字符串 System.out.println(p.getVar().length()) ; // 取得字符串的長度 } };
class Point<T>{ private T x ; // 表示X坐標 private T y ; // 表示Y坐標 public void setX(T x){ this.x = x ; } public void setY(T y){ this.y = y ; } public T getX(){ return this.x ; } public T getY(){ return this.y ; } }; public class GenericsPoint{ public static void main(String args[]){ Point<Integer> p = new Point<Integer>() ; p.setX(10) ; // 利用自動裝箱操作:int --> Integer p.setY(20) ; // 利用自動裝箱操作:int --> Integer int x = p.getX() ; // 自動拆箱 int y = p.getY() ; // 自動拆箱 System.out.println("整數表示,X坐標為:" + x) ; System.out.println("整數表示,Y坐標為:" + y) ; } };
2、構造方法中使用泛型

class Point<T>{ // 此處可以隨便寫標識符號,T是type的簡稱 private T var ; // var的類型由T指定,即:由外部指定 public Point(T var){ // 通過構造方法設置內容 this.var = var ; } public T getVar(){ // 返回值的類型由外部決定 return var ; } public void setVar(T var){ // 設置的類型也由外部決定 this.var = var ; } }; public class GenericsDemo08{ public static void main(String args[]){ Point<String> p = new Point<String>("MLDN") ; // 裏麵的var類型為String類型 System.out.println("內容:" + p.getVar()) ; } };
3、設置多個泛型
class Notepad<K,V>{ // 此處指定了兩個泛型類型 private K key ; // 此變量的類型由外部決定 private V value ; // 此變量的類型由外部決定 public K getKey(){ return this.key ; } public V getValue(){ return this.value ; } public void setKey(K key){ this.key = key ; } public void setValue(V value){ this.value = value ; } }; public class GenericsDemo09{ public static void main(String args[]){ Notepad<String,Integer> t = null ; // 定義兩個泛型類型的對象 t = new Notepad<String,Integer>() ; // 裏麵的key為String,value為Integer t.setKey("李興華") ; // 設置第一個內容 t.setValue(30) ; // 設置第二個內容 System.out.print("姓名;" + t.getKey()) ; // 取得信息 System.out.print(",年齡;" + t.getValue()) ; // 取得信息 } };
4、泛型的安全警告
在泛型應用中最好在聲明類對象的時候指定好其內部的數據類型,例如“Info<String>”,但也可不指定類型。
class Info<T>{ private T var ; public T getVar(){ return this.var ; } public void setVar(T var){ this.var = var ; } public String toString(){ // 覆寫Object類中的toString()方法 return this.var.toString() ; } }; public class GenericsDemo10{ public static void main(String args[]){ Info i = new Info() ; // 警告,沒有指定泛型類型 i.setVar("MLDN") ; // 設置字符串 System.out.println("內容:" + i.getVar()) ; } };編譯程序,出現警告:

程序並不會影響執行。但是此時,在Info類中並沒有指定泛型的類型。則在java中為了保證程序依然可以使用,會經T設置成Object類型。這樣一來,就可以接受任意類型的數據類型。也就是說此時的var是Object類型。所有泛型信息將被擦除,實際上以上的程序就是以下的定義格式:
class Info<T>{ private T var ; public T getVar(){ return this.var ; } public void setVar(T var){ this.var = var ; } public String toString(){ // 覆寫Object類中的toString()方法 return this.var.toString() ; } }; public class GenericsDemo11{ public static void main(String args[]){ Info<Object> i = new Info<Object>() ; // 指定Object為泛型類型 i.setVar("MLDN") ; // 設置字符串 System.out.println("內容:" + i.getVar()) ; } };

最後更新:2017-04-03 14:53:43