首页 > 编程语言 > 详细

Java泛型与集合笔记——子类型与通配符

时间:2016-05-26 02:01:18      阅读:221      评论:0      收藏:0      [点我收藏+]

Java泛型与集合笔记——子类型与通配符

不定期更新,无废话开始:
  1. List<Integer>不是List<Number>的子类,但List<Integer>是Collection<Integer>的子类。
  2. 一个List<? extends Number>的对象引用可以被赋值任何以Number或其子类为泛型的List或其子类的对象实例引用,如下例
    1 List<? extends Number> nums = new ArrayList<Integer>();
  3. 泛型方法可以显示指定其返回结果的泛型类型,如下例
    1 Arrays.<Object>asList(11.2"Hello");
    2 Collections.<Number>copy(objs, ints);
  4. Get与Put原则:当仅从结构中取出值则使用extends通配符,当仅向结构中添加值则使用super通配符,当对一个结构即取出又添加值时不要使用任何通配符。
    1 //Collections.copy方法即使用super又使用extends的例子
    2 public static <T> void copy(List<? super T> dest, List<? extends T> src)
     1 //另一个例子,对同一个结构即取值又设值,不使用任何通配符
     2 public static double sum(Collection<? extends Number> nums) {
     3   double s = 0.0;
     4   for (Number num : nums) s += num.doubleValue();
     5   return s;
     6 }
     7 
     8 public static void count(Collection<? super Integer> ints, int n) {
     9   for (int i = 0; i < n; i++) ints.add(i);
    10 }
    11 
    12 //注意这个方法参数的签名,没有使用任何通配符
    13 public static double sumCount(Collection<Number> nums, int n) {
    14   count(nums, n);
    15   return sum(nums);
    16 }

Java泛型与集合笔记——子类型与通配符

原文:http://www.blogjava.net/smcdl/archive/2016/05/25/430640.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!