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