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;
}
}
範型的定義與使用的示例
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.