`
啸笑天
  • 浏览: 3466025 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

38 泛型的通配符扩展应用39 泛型集合的综合应用案例

 
阅读更多

 

38 泛型的通配符扩展应用

泛型中的?通配符:

l问题:

 Ø  定义一个方法,该方法用于打印出任意参数化类型的集合中的所有数据,该方法如何定义呢?

l错误方式:

public static void printCollection(Collection<Object> cols) {

              for(Object obj:cols) {

                     System.out.println(obj);

              }

              /* cols.add("string");//没错

               cols = new HashSet<Date>();//会报告错误!*/

}

l正确方式:

public static void printCollection(Collection<?> cols) {

              for(Object obj:cols) {

                     System.out.println(obj);

              }

              //cols.add("string");//错误,因为它不知自己未来匹配就一定是String

              cols.size();//没错,此方法与类型参数没有关系

               cols = new HashSet<Date>();//没错,使用?通配符可以引用其他各种参数化的类型,

       }

l总结:

 Ø 使用?通配符可以引用其他各种参数化的类型,?通配符定义的变量主要用作引用可以调用与参数化无关的方法,不能调用与参数化有关的方法。

Ps

/*Cols<Object> 中的Object只是说明Cols<Object> 实例对象中的方法接受的参数是Object

Cols<Object> 是一种具体类型,new HashSet<Date>也是一种具体类型,两者没有兼容性问题。

*/

Collection<?>  a可以与任意参数化的类型匹配,但到底匹配的是什么类型,只有以后才知道,所以,

a=new ArrayList<Integer>a=new ArrayList<String>都可以, a.add(new Date())a.add(“abc”)都不行,

 

泛型中的?通配符的扩展:

l  限定通配符的上边界:

 Ø  正确:Vector<? extends Number> x = new Vector<Integer>();

 Ø  错误:Vector<? extends Number> x = new Vector<String>();

l  限定通配符的下边界:

Ø  正确:Vector<? super Integer> x = new Vector<Number>();

Ø  错误:Vector<? super Integer> x = new Vector<Byte>();

l  提示:

Ø  限定通配符总是包括自己。

Ø  只能用作引用,不能用它去给其他变量赋值

       Vector<? extends Number> y = new Vector<Integer>();

       Vector<Number> x = y;

       上面的代码错误,原理与Vector<Object > x11 = new Vector<String>();相似,

       只能通过强制类型转换方式来赋值。

 

 

39 泛型集合的综合应用案例

l  能写出下面的代码即代表掌握了Java的泛型集合类:

 HashMap<String,Integer> hm = new HashMap<String,Integer>();

  hm.put("zxx",19);

  hm.put("lis",18);

 

  Set<Map.Entry<String,Integer>> mes= hm.entrySet();

  for(Map.Entry<String,Integer> me : mes) {

   System.out.println(me.getKey() + ":" + me.getValue());

  }

l  对在jsp页面中也经常要对SetMap集合进行迭代:

<c:forEach items=“${map}” var=“entry”>

       ${entry.key}:${entry.value}

</c:forEach>

代码:

HashMap<String, Integer> maps=new HashMap<String, Integer>();
      maps.put("a", 1);
      maps.put("b", 1);
      maps.put("c", 1);
     
      Set<Map.Entry<String, Integer>> entrySet=maps.entrySet();
      for (Map.Entry<String, Integer> entry : entrySet) {
         System.out.println(entry.getKey()+":"+entry.getValue());
      }
 

 

分享到:
评论

相关推荐

    JAVA应用实例集合

    实例将解释泛型类、泛型方法以及通配符的使用。 通过这些实例,学习者不仅可以了解Java的基本概念,还能加深对高级特性的理解。实践中遇到问题并解决问题,是提高编程技能的有效方式。建议在学习过程中,逐步分析每...

    李兴华 java核心技术 配套案例代码源码

    8. **泛型**:Java泛型提高了代码的类型安全,源码中会展示如何使用泛型类、泛型接口、泛型方法,以及通配符的使用。 9. **注解(Annotation)**:注解在Java中用于提供元数据,源码中可能包含自定义注解及其处理器...

    Java实用程序设计100例(源代码)

    第七章可能讲解了泛型和集合的高级用法,如泛型类、泛型方法、泛型通配符等。泛型提高了代码的类型安全性和可读性,使得集合可以更有效地处理不同类型的元素。 第八章可能涉及了Java的高级特性,如反射、注解、枚举...

    OCP java SE7 Programmer II Certification Guide

    - **泛型的高级话题**:深入探讨泛型通配符、类型边界等高级特性,以及它们在实际编程中的作用。 - **异常处理的最佳实践**:给出异常处理的最佳实践建议,例如避免过度使用异常作为流程控制手段等。 - **集合框架的...

    Java案例开发下载

    11. **泛型**:泛型提高了代码的类型安全,源代码中可能使用泛型类、泛型方法,以及通配符等特性。 12. **Java 8及以后的新特性**:例如Lambda表达式、Stream API、Optional类等,这些新特性让Java更加简洁和高效。...

    java加强笔记

    - 综合应用案例可能涉及使用泛型集合来处理不同类型的数据。 ##### 5. 自定义泛型方法及其应用 - 可以自定义泛型方法来处理泛型参数。 ##### 6. 自定义泛型类的应用 - 泛型类允许创建类型安全的对象,可以自定义...

    javaSE代码实例

    13.5.4 Pattern与Matcher类的综合应用 264 13.6 String类中正则式的应用 266 13.6.1 模式匹配检查 266 13.6.2 利用正则式进行查找替换 267 13.6.3 利用正则式对字符串进行分析 268 13.7 小结 269 第14...

    JAVA 2应用编程150例

    《JAVA 2应用编程150例》是一本专注于Java编程实践的教程,它涵盖了大量实际编程中的案例,旨在帮助读者深入理解Java语言的核心概念和常用API,提升编程能力。在学习Java 2(也称为Java SE)的过程中,了解和实践...

    JAVA高校标准教程

    学生应学习泛型类、泛型接口、通配符和泛型方法。 10. **Java SE和Java EE**:Java Standard Edition(SE)是Java的基础平台,而Enterprise Edition(EE)则扩展了对服务器端应用的支持,包括Servlet、JSP、EJB等。...

    一个十分好的java基础学习的课件,其中还有一些实例供学习

    这个课件很可能还会包含一些实际项目或案例,让学习者有机会将所学知识应用于实践中。例如,创建简单的命令行应用程序,实现一个简单的文件管理系统,或者构建一个基于TCP/IP的聊天程序。通过实践,学习者能够更好地...

    java第18章java-chapter18.rar

    本章可能讲解泛型的基本概念、通配符、类型擦除等。 10. **注解(Annotation)**:注解为编译器和运行时提供元数据,可以用于代码分析、代码生成、运行时验证等。第18章可能包含注解的定义、使用和自定义注解的创建...

    java入门到精通PPT

    10. **泛型**:提高代码的类型安全性和重用性,理解泛型类、泛型方法和通配符。 11. **IO/NIO**:从传统的 Blocking I/O 转向非阻塞的 New IO,了解NIO和AIO(异步IO)模型。 12. **JVM**:理解Java虚拟机的工作原理...

    《Java核心技术 卷II 进阶版(原书第九版》.rar

    书中将详细阐述泛型的基本概念、通配符、类型擦除和泛型方法。 7. **枚举与注解**:枚举类型提供了常量的强类型表示,而注解则是一种元数据,可以用来提供编译时或运行时的信息。这两者都是Java中重要的特性,对...

    java j进阶篇原书第8版

    4. **集合框架**:详述了ArrayList、LinkedList、HashSet、HashMap等集合类的使用,以及泛型和迭代器的概念,使读者能够有效地存储和管理数据。 5. **文件与IO流**:探讨了Java的输入/输出系统,包括文件操作、字符...

    JAVA程序设计技巧与开发实例

    理解泛型的声明、限制和通配符,能写出更健壮的代码。 9. **网络编程**:Java提供了Socket和ServerSocket类进行网络通信,理解TCP和UDP协议,以及如何构建基于HTTP的Web服务,是进行网络编程的基础。 10. **数据库...

    Java编程精选集锦(附源代码)

    了解泛型的使用,如泛型类、泛型方法和通配符,能编写出更健壮的代码。 10. **反射API**:Java的反射API允许在运行时检查类、接口、字段和方法的信息,甚至动态调用方法和创建对象。反射是许多高级功能,如插件系统...

    疯狂java讲义全本扫描版06,07部分

    这部分可能会讲解泛型的基本用法,通配符,以及泛型与集合的结合使用。 5. **IO流**:Java的IO流系统是处理输入输出的关键,这部分可能包含字符流与字节流的区别,缓冲流的使用,以及文件操作,管道流,对象序列化...

    thinking in Java, 4th Edition 完整清晰版 [Java 核心思想]

    此外,还介绍了泛型类、泛型方法以及通配符等高级特性。 3. **并发编程**:这一部分深入探讨了Java中的并发编程机制,包括线程的基本概念、线程同步的方法、并发工具类的使用等。通过实例讲解了如何设计高效、稳定...

    java100_li(70_100)

    4. **泛型**:86-90会介绍泛型的概念,类型参数,通配符,以及泛型类和泛型方法。 5. **IO流**:91-95可能涵盖文件读写,字节流和字符流,缓冲流,对象序列化,以及文件复制。 6. **网络编程**:96-98会讲解Socket...

Global site tag (gtag.js) - Google Analytics