🌈键盘敲烂,年薪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中的泛型在编译后会被擦除