一点Java泛型集合的理解.doc_第1页
一点Java泛型集合的理解.doc_第2页
一点Java泛型集合的理解.doc_第3页
一点Java泛型集合的理解.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

什么是泛型?泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。Map 类允许您向一个 Map 添加任意类的对象,即使最常见的情况是在给定映射(map)中保存某个特定类型(比如String)的对象。因为 Map.get() 被定义为返回 Object,所以一般必须将 Map.get() 的结果强制类型转换为期望的类型,如下面的代码所示:1. Map m = new HashMap(); 2. m.put(key, value); 3. String result = (String)m.get(key);想让程序编译通过,必须将m.get(“key”)强制转换为String类型,因为这里放入了String类型的值,取得的结果也一定是String类型的。如果你往map里放入了不是String类型的值,那么将会报ClassCastException错误。理想情况下,您可能会得出这样一个观点,即 m 是一个 Map,它将 String 键映射到 String 值。这可以让您消除代码中的强制类型转换,同时获得一个附加的类型检查层,该检查层可以防止有人将错误类型的键或值保存在集合中。这就是泛型所做的工作。泛型带来的好处类型安全限制了变量定义的类型。消除强制类型转换还是拿刚才的例子说1. Map m = new HashMap(); 2. m.put(key, value); 3. String result = m.get(key);上面的代码是不是少了强制转换而且代码看着也简洁多了,这就是泛型的好处之一。平时大家写的时候,编辑器会有个黄色的感叹号来提醒你需要使用泛型。泛型的通配符?通配符使用?通配符可以引用其他各种参数化的类型,?通配符定义的变量主要用作引用,可以调用与参数化无关的方法,不能调用与参数化有关的方法。下面看个例子:1. publicclass People 2.3. private String name; 4. private String job; 5.6. public People() 7. 8.9. public People(String _name, String _job, int _sex) 10. = _name; 11. this.job = _job; 12. this.sex = _sex; 13. 14.15. publicvoid SayHello() 16. System.out.println(我是一位 + job + ;我的名字叫 + name); 17. 18.19. public String getName() 20. return name; 21. 22.23. publicvoid setName(String name) 24. = name; 25. 26.27. public String getJob() 28. return job; 29. 30.31. publicvoid setJob(String job) 32. this.job = job; 33. 34.35. publicint getSex() 36. return sex; 37. 38.39. publicvoid setSex(int sex) 40. this.sex = sex; 41. 42.43. privateint sex; 44.45. 1. publicclass SoftwareEngineer extends People 2.3. publicvoid coding() 4. System.out.println(coding); 5. 6. 1. publicclass Cook extends People 2.3. publicvoid cook() 4. System.out.println(cooking); 5. 6. 主方法:1. List flist = new ArrayList(); 2. flist.add(new People(); 3. SoftwareEngineer soft = (SoftwareEngineer) flist.get(0); 4. soft.coding();输出结果:coding注意这里是super,那么flist.add()里面添加new People(),也可以添加new SoftwareEngineer()或者new Cook(),都可以!那么,我们换成下面的看看:1. List flist = new ArrayList();这里就不可以添加了。?list中为什么不能加入people类和people类的子类呢,原因是这样的:List表示上限是People,下面这样的赋值都是合法的1. List list1 = new ArrayList(); 2. List list2 = new ArrayList(); 3. List list3 = new ArrayList();如果List支持add方法的方法合法的话: list1可以add People和所有People的子类 list2可以add SoftWareEngineer和所有SoftWareEngineer的子类 list3可以add Cook和所有Cook的子类这样的话,问题就出现了 List所应该持有的对象是People的子类,而且具体是哪一个子类还是个未知数,所以加入任何People的子类都会有问题,因为如果add People的话,可能List持有的对象是new ArrayList() SoftWareEngineer的加入肯定是不行的,如果 如果add Cook的话,可能List持有的对象是new Arr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论