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;
}
}
范型的定义与使用的示例
最新推荐文章于 2021-08-28 23:00:56 发布