「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战」。
茫茫人海千千万万,感谢这一秒你看到这里。希望我的文章对你的有所帮助!
愿你在未来的日子,保持热爱,奔赴山海!
题记:趁着11月更文,回归写作兴趣中,前段时间因需要不断加班赶两个项目的上线,基本都需要天天很晚回来,没啥时间去玩写作了。现在没那么忙了,也不能再浪下去了!所以,I'm coming!
😛 我们为什么需要使用泛型
早期的Object类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换的问题。也就存在这隐患,所以Java提供了泛型来解决这个安全问题。
-
来看一个经典案例:
public static void main(String[] args) { //测试一下泛型的经典案例 ArrayList arrayList = new ArrayList(); arrayList.add("helloWorld"); arrayList.add("taiziyenezha"); arrayList.add(88);//由于集合没有做任何限定,任何类型都可以给其中存放 for (int i = 0; i < arrayList.size(); i++) { //需求:打印每个字符串的长度,就要把对象转成String类型 String str = (String) arrayList.get(i); System.out.println(str.length()); } } 复制代码运行这段代码,程序在运行时发生了异常:
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String 复制代码发生了数据类型转换异常,这是为什么?
由于ArrayList可以存放任意类型的元素。例子中添加了一个String类型,添加了一个Integer类型,再使用时都以String的方式使用,导致取出时强制转换为String类型后,引发了ClassCastException,因此程序崩溃了。
这显然不是我们所期望的,如果程序有潜在的错误,我们更期望在编译时被告知错误,而不是在运行时报异常。而为了解决类似这样的问题(在编译阶段就可以解决),在jdk1.5后,泛型应运而生。让你在设计API时可以指定类或方法支持泛型,这样我们使用API的时候也变得更为简洁,并得到了编译时期的语法检查。
我们将第一行声明初始化ArrayList的代码更改一下,编译器就会在编译阶段就能够帮我们发现类似这样的问题。现在再看看效果。
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("helloWorld");
arrayList.add("taiziyenezha");
arrayList.add(88);// 在编译阶段,编译器就会报错
复制代码
这样可以避免了我们类型强转时出现异常。
🌸总结
相信各位看官都对泛型有了一些初步了解,那我们继续期待下一章的泛型的内容吧!欢迎期待下一章的到来!
学到这里,今天的世界打烊了,晚安!虽然这篇文章完结了,但是我还在,永不完结。我会努力保持写文章。来日方长,何惧车遥马慢!
感谢各位看到这里!愿你韶华不负,青春无悔!
注: 如果文章有任何错误和建议,请各位大佬尽情留言!如果这篇文章对你也有所帮助,希望可爱亲切的您给个三连关注下,非常感谢啦!




近期评论