閱讀182 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

  上一篇:go 關於mysql的MERGE存儲引擎簡單例子
  下一篇:go hibernate中關聯關係的小結