範型的定義與使用的示例

import org.junit.Test;

public class TestCase {
	/**
	 * 範型:利用編譯器實現的參數化類型,優點可以利用編譯器檢查限制數據類型,減少軟件在運行期的錯誤!
	 *    可以減少數據類型的轉換麻煩。
	 * 範型是利用編譯器實現的(假範型),在運行期間沒有範型檢查,利用編譯器擦除實現的。
	 */
	@Test 
	public void testShop(){
		//無法限制 參數 的類型!
		Shop petShop = new Shop();
		petShop.addProduct(new Food("驢打滾")); 
		//petShop.addProduct(new Pet("龍貓"));  
		//Pet pet = (Pet)petShop.buy();//會發送類型轉換的運行錯誤
		
		//利用 類型參數Pet約定了商店銷售商品的類型
		Store<Pet> petStore = new Store<Pet>();
		//petStore.addProduct(new Food("驢打滾")); 
		petStore.addProduct(new Pet("龍貓")); 
		Pet pet = petStore.buy();//自動轉換類型,類安全的轉換
		
		//編譯期間,提前約束數據類,避免了運行期間數據類型轉換的錯誤
		
		String s = Store.getName("Tom", String.class);
		Integer n = Store.getName(5, Integer.class);
		System.out.println(s);
		System.out.println(n);
	}
}
/**
 * 範型類聲明商店
 */
class Store<P>{
	P product;
	public Store() {
	}
	public void addProduct(P product){
		this.product = product;
	}
	public P buy(){
		return product;
	}
	//方法範型, 約束參數或返回值的類型
	public static <E> E getName(E type, Class<E> cls) {
		System.out.println("Call getName"); 
		return type;
	}
	
}

class Shop{
	Object product;
	public Shop() {
	}
	public void addProduct(Object product){
		this.product = product;
	}
	public Object buy(){
		return product;
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章