java泛型與object的比較


在Java SE 1.5之前,沒有泛型的情況的下,通過對類型Object的引用來實現參數的“任意化”,“任意化”帶來的缺點是要做顯式的強制類型轉換,而這種轉換是要求開發者對實際參數類型可以預知的情況下進行的。對於強制類型轉換錯誤的情況,編譯器可能不提示錯誤,在運行的時候才出現異常,這是一個安全隱患。

泛型的好處是在編譯的時候檢查類型安全,並且所有的強制轉換都是自動隱式的,提高代碼的重用率。
 
  1. public class Gen<T> {  
  2.     private T ob; // 定義泛型成員變量  
  3.   
  4.     public Gen(T ob) {  
  5.         this.ob = ob;  
  6.     }  
  7.   
  8.     public T getOb() {  
  9.         return ob;  
  10.     }  
  11.   
  12.     public void setOb(T ob) {  
  13.         this.ob = ob;  
  14.     }  
  15.   
  16.     public void showType() {  
  17.         System.out.println("T的實際類型是: " + ob.getClass().getName());  
  18.     }  
  19. }  
public class Gen<T> {
	private T ob; // 定義泛型成員變量

	public Gen(T ob) {
		this.ob = ob;
	}

	public T getOb() {
		return ob;
	}

	public void setOb(T ob) {
		this.ob = ob;
	}

	public void showType() {
		System.out.println("T的實際類型是: " + ob.getClass().getName());
	}
}
  1. public class GenDemo {  
  2.     public static void main(String[] args) {  
  3.         // 定義泛型類Gen的一個Integer版本  
  4.         Gen<Integer> intOb = new Gen<Integer>(88);  
  5.         intOb.showType();  
  6.         int i = intOb.getOb();  
  7.         System.out.println("value= " + i);  
  8.         System.out.println("----------------------------------");  
  9.         // 定義泛型類Gen的一個String版本  
  10.         Gen<String> strOb = new Gen<String>("Hello Gen!");  
  11.         strOb.showType();  
  12.         String s = strOb.getOb();  
  13.         System.out.println("value= " + s);  
  14.     }  
  15. }  
public class GenDemo {
	public static void main(String[] args) {
		// 定義泛型類Gen的一個Integer版本
		Gen<Integer> intOb = new Gen<Integer>(88);
		intOb.showType();
		int i = intOb.getOb();
		System.out.println("value= " + i);
		System.out.println("----------------------------------");
		// 定義泛型類Gen的一個String版本
		Gen<String> strOb = new Gen<String>("Hello Gen!");
		strOb.showType();
		String s = strOb.getOb();
		System.out.println("value= " + s);
	}
}
 
  1. public class Gen2 {  
  2.     private Object ob; //定義一個通用類型成員  
  3.     public Gen2(Object ob) {  
  4.     this.ob = ob;  
  5.     }  
  6.     public Object getOb() {  
  7.     return ob;  
  8.     }  
  9.     public void setOb(Object ob) {  
  10.     this.ob = ob;  
  11.     }  
  12.     public void showTyep() {  
  13.     System.out.println("T的實際類型是: " + ob.getClass().getName());  
  14.     }  
  15. }  
public class Gen2 {
	private Object ob; //定義一個通用類型成員
	public Gen2(Object ob) {
	this.ob = ob;
	}
	public Object getOb() {
	return ob;
	}
	public void setOb(Object ob) {
	this.ob = ob;
	}
	public void showTyep() {
	System.out.println("T的實際類型是: " + ob.getClass().getName());
	}
}
  1. public class GenDemo2 {  
  2.     public static void main(String[] args) {  
  3.         //定義類Gen2的一個Integer版本  
  4.         Gen2 intOb = new Gen2(new Integer(88));  
  5.         intOb.showTyep();  
  6.         int i = (Integer) intOb.getOb();  
  7.         System.out.println("value= " + i);  
  8.         System.out.println("---------------------------------");  
  9.         //定義類Gen2的一個String版本  
  10.         Gen2 strOb = new Gen2("Hello Gen!");  
  11.         strOb.showTyep();  
  12.         String s = (String) strOb.getOb();  
  13.         System.out.println("value= " + s);  
  14.         }  
  15. }  
public class GenDemo2 {
	public static void main(String[] args) {
		//定義類Gen2的一個Integer版本
		Gen2 intOb = new Gen2(new Integer(88));
		intOb.showTyep();
		int i = (Integer) intOb.getOb();
		System.out.println("value= " + i);
		System.out.println("---------------------------------");
		//定義類Gen2的一個String版本
		Gen2 strOb = new Gen2("Hello Gen!");
		strOb.showTyep();
		String s = (String) strOb.getOb();
		System.out.println("value= " + s);
		}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM