Java学习笔记29(集合框架三:泛型)
2018-06-18 03:52:59来源:未知 阅读 ()
泛型的概念:
简单地讲,就是同一个方法(类),可以接受不同的数据类型并运行得到相对应的结果,不会出现安全问题
上一篇有一段这样的代码:
没有定义集合类型、迭代器类型
package demo; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class CollectionDemo { public static void main(String[] args) { //集合可以存储任意类型的对象 //集合中,不指定存储的数据类型,也可以存储 Collection c1 = new ArrayList(); c1.add("abc"); c1.add("def"); Iterator it1 = c1.iterator(); while(it1.hasNext()){ //it.next获取Object类型,强制转换 String s1 = (String)it1.next(); System.out.println(s1.length()); } } }
这里会有隐患:如果add(1);,自动装箱成Integer类型,无法转换成String,发生类型的转换异常
java中提出了泛型的概念,来解决这个问题:
package demo; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class GenericDemo { public static void main(String[] args) { function(); } public static void function(){ Collection<String> c1 = new ArrayList<String>(); c1.add("abc"); c1.add("def"); Iterator<String> it1 = c1.iterator(); while(it1.hasNext()){ String s1 = it1.next(); System.out.println(s1); } } }
这时候如果add(1);,在编译的时候会无法通过,解决了安全问题
其实这里的泛型,是伪泛型,这里只是一个编译的手段,如果不是String类型,编译无法通过,否则编译成功
而编译后的class文件里面不存在泛型,但是由于编译过程中处理了类型问题,所以最后运行也是安全的
泛型的方法(了解即可,没有实际应用价值):
package demo; import java.util.ArrayList; public class GenericDemo { public static void main(String[] args) { ArrayList<Integer> array = new ArrayList<Integer>(); // ArrayList集合内有方法toArray泛型方法 array.add(123); array.add(456); Integer[] i = new Integer[(array.size())]; Integer[] j = array.toArray(i); for (Integer k : j) { System.out.println(k); } } }
同样存在泛型的接口,泛型类等,目的都是为了解决安全问题并且方便使用者,并且带来了增强for循环
泛型的通配符?:
package demo; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; public class GenericDemo { public static void main(String[] args) { ArrayList<String> array = new ArrayList<String>(); array.add("abc"); array.add("def"); HashSet<Integer> set = new HashSet<Integer>(); set.add(123); set.add(456); iterator(array); iterator(set); } //要求定义一个方法,可以同时迭代两个集合 public static void iterator(Collection<?> c){ Iterator<?> it1 = c.iterator(); while(it1.hasNext()){ System.out.println(it1.next()); } } }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash