zoukankan      html  css  js  c++  java
  • Java Generics and Collections-2.2

    2.2 Wildcards with extends

    前面介绍过List<Integer>不是List<Number>的子类,即前者不能替换后者,
    java使用? extends [classname]语法,即List<Integer>
    可以替换 List<? extends Number>
    看两段代码:

    package java_generics_collections.chap2;
    
    import org.junit.Test;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * Created by jintaox on 2016/3/21.
     */
    public class Test_2_1 {
        @Test
        public void test_01() throws Exception {
            List<Integer> ints = new ArrayList<>();
            ints.add(3);
            ints.add(4);
    //        List<Number> nums = ints;//compile error
    //        nums.add()
        }
    }
    

    这是上一节介绍的内容,即List<Integer> 不能替换
    List<Number>,语法编译不过,原因也介绍了。
    下面这段代码:

    package java_generics_collections.chap2;
    
    import org.junit.Test;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * Created by jintaox on 2016/3/22.
     */
    public class Test_2_2 {
        @Test
        public void test_01() throws Exception {
            List<Integer> ints = new ArrayList<>();
            ints.add(1);
            ints.add(12);
            List<? extends Number> nums = ints;//compile pass
    //        nums.add(2.3);//compile error
        }
    }
    
    

    可以看出List<Integer> 可以替换
    List<? extends Number>
    但是nums.add(2.3)是不允许的,还是那个原因,nums调用的实际是ints的add()方法(多态),
    add(Integer i),因此,此处放一个double是不能编译通过的。
    好了。

    加油,我要做技术专家。

  • 相关阅读:
    Sed的使用方法简介
    Shell脚本基础
    网络配置与内核模块相关
    RPM管理,计划任务与性能监控
    SSH服务
    LVM与RAID阵列
    网络存储服务器
    FTP服务
    网络安全之iptables防火墙
    MySQL使用笔记(七)排序和限制数据记录查询
  • 原文地址:https://www.cnblogs.com/xiaojintao/p/5306086.html
Copyright © 2011-2022 走看看