`
啸笑天
  • 浏览: 3436687 次
  • 性别: 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基础-泛型通配符

    Java泛型通配符

    NULL 博文链接:https://mydownload.iteye.com/blog/1330570

    泛型集合应用(dictionary<obj,obj>)

    一个泛型集合的应用,主要讲的dictionary,obj&gt;的应用

    sqlsugar 泛型分页扩展

    sqlsugar 泛型分页扩展

    泛型和泛型集合类用法

    泛型和泛型集合类用法泛型和泛型集合类用法泛型和泛型集合类用法泛型和泛型集合类用法泛型和泛型集合类用法

    Java泛型和集合

    Java Generics and Collections 英文版,详细描述java 泛型技术

    Java中泛型通配符的使用方法示例

    主要介绍了Java中泛型通配符的使用方法,结合实例形式分析了java中泛型通配符的功能、语法及在泛型类创建泛型对象中的使用方法,需要的朋友可以参考下

    C#泛型集合与非泛型集合

    在.NET FCL为我们提供了很多...结论:如果在C#2.0版本以上,尽量使用泛型集合类,而不使用非泛型集合类。因为,1. 泛型编程是从c#2.0开始才被.net支持的。2.泛型集合在性能和类型安全方面优于非泛型集 合。 。。。。

    泛型讲解 类型通配符

    泛型:就是在定义类,接口时指定类型形参, 这个类型形参将在声明变量,创建对象时确定(即实际传入的类型参数,也称为类型实参)

    Python中泛型函数应用案例.pdf

    Python中泛型函数应用案例.pdf

    泛型集合与数组应用老师找学生

    泛型集合与数组应用老师找学生 泛型集合 数组应用 老师找学生 C# 北大青鸟高老师

    c# 泛型、集合应用实例源码

    此实例代码大部分从网上整理而来,因为近期感觉泛型、集合等在ASP.NET web项目中开发还是比较重要的,对提高系统情能很有帮助。

    C#中的集合与泛型应用实例

    C#中的集合与泛型应用实例,针对集合与泛型进行详细讲解,代码简单易懂。

    泛型实例详解

    通过7个实例详细介绍泛型的使用,包括普通泛型、通配符、泛型方法、泛型接口、受限泛型、泛型的转型、泛型数组。相信看完这几个泛型的例子就会使用泛型了。注意,这里并不介绍泛型的具体语法,只介绍泛型的使用。

    java泛型集合 java集合 集合 java Collection

    java泛型集合 java集合 集合 java Collection 排序 集合排序

    Java泛型应用实例

    网上很多讲泛型原理的文章, 很少有提到我们什么时候使用泛型有优势, 我就泛型类和方法搞了两个实例,算是探索下泛型使用的冰山一角吧,在我博客里面有配套的文章,可以配套看.

    Java试题-3:反射和泛型的综合应用

    Java试题-3:反射和泛型的综合应用 Java反射 泛型都是比较高级的应用技术

    java中的泛型通配符的使用

    这是小编自己学习的心得,想通过这个平台对大家共享,希望大家前来评价一下,我及时改正,通配符这个是在泛型中使用的一个可以帮助大家更加方便简洁的去利用代码,它是其他泛型的一个总父类!

Global site tag (gtag.js) - Google Analytics