泛型(generics)是JDK1.5中引入的一个新特性,泛型提供了编译时类型安全的检测机制,该机制允许我们在编译时检测到非法的类型数据结构。
2.泛型的好处泛型的本质是 参数化类型,也就是所 *** 作的数据类型被指定为一个参数。
3.在使用泛型之前存在的问题
- 类型安全
- 消除了强制类型转换
以集合为例,在使用泛型之前,我们可以构建一个元素类型为Object的集合,该集合可以存储任意类型的元素,而在使用集合的过程中,必须明确知道每个元素的类型,【因为我们需要根据具体的数据类型进行对应的 *** 作】,因此在使用过程中会进行类型的强制转换,就会存在很大几率上引发ClassCastException 异常;
import java.util.ArrayList; public class ApplicationWithoutGenerics { public static void main(String[] args) { //1.创建一个没有使用泛型的ArrayList 对象 ArrayList list = new ArrayList<>(); //2.往集合对象中添加进入元素 list.add("aa"); list.add(100); list.add('b'); list.add(true); //3.循环遍历一下元素:加如我们认为所有的元素都是 String 类型 for (Object o : list) { String o_temp = (String) o; // 这里会存在异常 System.out.println(o_temp); } } }
# 运行结果 aa Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String at com.northcastle.firstexperience.ApplicationWithoutGenerics.main(ApplicationWithoutGenerics.java:22)4.集合中使用泛型
非常常见的 *** 作,直接上代码
import java.util.ArrayList; public class ApplicationWithGenerics { public static void main(String[] args) { //1.创建一个没有使用泛型的ArrayList 对象 ArrayListlist = new ArrayList<>(); //2.往集合对象中添加进入元素 list.add("aa"); list.add("bb"); list.add("cc"); //list.add(100); // 添加非String类型的在编译时不会通过 //3.循环遍历一下元素 for (String s : list) { // 自动时别的就是String类型 System.out.println(s); } } }
# 运行结果 : 就是正常输出集合中的各个元素 aa bb cc5.完成
Congratulations!
You are one step closer to success!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)