泛型是一种强类型(strongly-typed)编程机制,它允许你编写具有参数化类型的代码,以便更加灵活和安全地处理不同数据类型的对象。泛型提供了编译时类型检查,这有助于在编译时捕获潜在的类型错误,而不是在运行时,在运行时泛型将会被彻底擦除。
- 基础应用包含泛型类、泛型方法、泛型属性等,在这里就不一一举例了。
- 泛型中extends和super的理解和应用;
解释:
<? extends T> :指定类型必须是当前类型T和T的子类,用于取数据;
<? super T> :指定类型必须是当前类型T和T的超类,用于存数据;
应用:
public void getFood(List<<? extends Food>> list){
Food food = list.get(0);
Fruit fruit = new Fruit();
list.add(fruit); //编译报错,因为list对应的真实类型为Food的子类,不确定具体是哪个子类,编译器无法将fruit和list的类型进行匹配。
}
========================================================
public void loadFood(List<<? super Fruit>> list){
Fruit fruit = new Fruit();
list.add(fruit);
Fruit f = list.get(0); //编译报错,因为list对应的真实类型为Fruit的超类,Furit不能直接接收其元素。
}
- 泛型中通配符" ?"和" T "的理解和应用
- 声明时不影响,在使用的过程中" ?"可以为任何类型,相应的其能对象能使用的方法就会少很多;
- 声明时不影响,在使用的过程中会对泛型" T "指定具体类型,类型一旦指定,其相关的参数或者返回值就只能是当前类型。
标签:子类,list,fruit,类型,Fruit,泛型 From: https://www.cnblogs.com/qlsty/p/17996578