Java泛型定义与用法入门示例
本文实例讲述了Java泛型定义与用法。分享给大家供大家参考,具体如下:
一引入泛型背景
Java集合不会知道它们需要用它来保存什么类型的对象,所以他们把集合设计成能保存任何类型的对象,只要求具有很好的通用性。但这样做也带来两个问题:
- 集合对元素类型没有任何限制,这样可能引发一些问题:例如想创建一个只能保存Dog对象的集合,但程序也可以轻易地将Cat对象“丢”进去,所以可能引发异常。
- 由于把对象“丢进”集合时,集合丢失了对象的状态信息,集合只知道它盛装的是Object,因此取出集合元素后通常还需要进行强制类型转换。这种强制类型转换既会增加编程的复杂度、也可能引发ClassCastException。
二不引入泛型的问题——编译时不检查类型的异常
1代码
importjava.util.*; publicclassListErr { publicstaticvoidmain(String[]args) { //创建一个只想保存字符串的List集合 ListstrList=newArrayList(); strList.add("疯狂Java讲义"); strList.add("疯狂Android讲义"); //"不小心"把一个Integer对象"丢进"了集合 strList.add(5);//A处 strList.forEach(str->System.out.println(((String)str).length()));//B处 } }
2运行
Exceptioninthread"main"java.lang.ClassCastException:java.lang.Integercannotbecasttojava.lang.String
8
atListErr.lambda$main$0(ListErr.java:14)
11
atjava.util.ArrayList.forEach(ArrayList.java:1257)
atListErr.main(ListErr.java:14)
3说明
程序在A处不小心把一个Integer对象“丢进”了List集合,这将导致程序在B处引发ClassCastException异常,因为程序试图把一个Integer对象转换为String类型。
三引入泛型实战
1代码
importjava.util.*; publicclassGenericList { publicstaticvoidmain(String[]args) { //创建一个只想保存字符串的List集合 ListstrList=newArrayList ();//① strList.add("疯狂Java讲义"); strList.add("疯狂Android讲义"); //下面代码将引起编译错误 //strList.add(5);//② strList.forEach(str->System.out.println(str.length()));//③ } }
2运行
8
11
3说明
在集合中使用泛型后带来如下优势:
- 程序再也不能“不小心”把其他对象“丢进”strList集合中,编译器会提示编译告警;
- 程序更加简洁,集合自动记住所有集合元素的数据类型,从而无需对集合元素进行强制类型转换。
四Java7泛型的菱形语法实战
1代码
importjava.util.*; publicclassDiamondTest { publicstaticvoidmain(String[]args) { //Java自动推断出ArrayList的<>里应该是String Listbooks=newArrayList<>(); books.add("疯狂Java讲义"); books.add("疯狂Android讲义"); //遍历books集合,集合元素就是String类型 books.forEach(ele->System.out.println(ele.length())); //Java自动推断出HashMap的<>里应该是String,List Map >schoolsInfo=newHashMap<>(); //Java自动推断出ArrayList的<>里应该是String List schools=newArrayList<>(); schools.add("斜月三星洞"); schools.add("西天取经路"); schoolsInfo.put("孙悟空",schools); //遍历Map时,Map的key是String类型,value是List 类型 schoolsInfo.forEach((key,value)->System.out.println(key+"-->"+value)); } }
2运行
8
11
孙悟空-->[斜月三星洞,西天取经路]
3说明
菱形语法对原有的泛型并没有改变,只是更好地简化了泛型编程。
更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。