🌈键盘敲烂,年薪30万🌈
目录
泛型的基础知识:
♥A 泛型的好处:
♠A 泛型擦除:
♣A 泛型的小细节:
泛型的使用:
①泛型类:
②⭐泛型接口:
③泛型方法:
泛型的通配符
泛型的基础知识:
♥A 泛型的好处:
- 统一数据类型。
- 把运行时期的问题提前到了编译期间,避免了强制类型转换可能出现的异常。
♠A 泛型擦除:
为什么java中的泛型是伪泛型❓
例如:把数据存入String类的一个集合里
存 - 编译器会进行泛型检查,如果不是String,你的代码下面会出现~~~(编译错误)
,如果是String类,强转为Object类存到集合里
取 - 将Object类转换为对应得数据类型
♣A 泛型的小细节:
- 泛型中不能写基本数据类型
- 指定泛型得具体类型后,可传入该类型得子类
- 如果不写泛型,默认Object
泛型的使用:
①泛型类:
如果定义一个类时,类型不确定,可以定义为泛型
public class MyArrayList<E>{
private Object[] Obj = new Object[10];
private int size = 0;
public void add(E val){
Obj[size++] = val;
}
}
public class Demo1{
public static void main(String[] args){
MyArrayList<Integer> list = new MyArrayList();
list.add(1);
}
}
②⭐泛型接口:
- 实现类指定类型
public class MyList Implements List<String>{
// 重写List的所有抽象方法
public void add(String e){……}
}
- 实现类继续沿用泛型
public class MyList<E> Implements List<E>{
public void add(E e){……}
}
③泛型方法:
当类中只有一个方法的类型不确定时,可使用泛型方法
public class Demo1{
public static void main(String[] args){
MyArrayList<Integer> list = new MyArrayList();
ListUtil.addAll(list, 1, 2, 3);
}
class ListUtil{
public static<E> void addAll(ArrayList<E> list, E e1, E, e2, E e3){
list.add(e1);
list.add(e2);
list.add(e3);
}
}
}
泛型的通配符
泛型不具备继承性!!!
本方法不确定类型,但是只想要继承结构里面的对象!!!
? extends E
表示可以传递E和E的子类
? super E
表示可以传递E和E的父类
public static void method(ArrayList<? extends YE> e){……}
public static void method(ArrayList<? super YE> e)(……)
📕总结:
泛型提供了编译时类型检查,避免了在运行时出现类型转换错误。这确保了代码的类型安全性,并在编译时捕获错误。
通配符可以使用上限和下限来限制泛型的范围。<? extends T>表示类型是T或T的子类,<? super T>表示类型是T或T的父类。
Java中的泛型在编译后会被擦除