• 上限下限


    /* <? super T> 与 <? extends T> 的区别,
     *  T 代表一个给定的接口
     * */
    import java.util.*;
    interface A1{}
    interface A2{}
    interface A3{}
    interface A4{}
    
    interface B1 extends A1{}
    interface B2 extends A1,A2{}
    interface B3 extends A3,A4{}
    interface B4 extends A4{}
    
    interface C1 extends B2{}
    interface C2 extends B2,B3{}
    interface C3 extends B3{}
    
    interface D1 extends C1,C2{}
    interface D2 extends C2{}
    
    interface E1 extends D1{}
    interface E2 extends D1{}
    interface E3 extends D2{}
    interface E4 extends D2{}
    
    
    public class UP_Interface {	
    
    public static void main(String args[]){ 
    /********************************************
     * 此处 extends 表示 有上界的统配符 ?,上界为  C2
     * 由此定义的引用 listUpper可以作为 
     * 接下来的 7 种 子泛型类型的 ArrayList 的引用来使用。 
     **********************************************/
       List<? extends C2> listUpper;//上界统配符 ?, 上界为  C2
    listUpper=new ArrayList<C2>();//能存储 C2 D1 D2 E1 E2 E3 E4
    listUpper=new ArrayList<D1>();//能存储    D1    E1 E2  
    listUpper=new ArrayList<D2>();//能存储       D2       E3 E4
    listUpper=new ArrayList<E1>();//能存储          E1             
    listUpper=new ArrayList<E2>();//能存储             E2             
    listUpper=new ArrayList<E3>();//能存储                E3             
    listUpper=new ArrayList<E4>();//能存储				   E4
                         
    /*************************************************
     * super 表示有下界的统配符 ? ,下界为  C2 , 
     * 由此定义的引用 listLower 可以作为 
     * 接下来的 7 种 子泛型类型的 ArrayList 的引用来使用。  
     ***************************************************/
    List<? super C2> listLower;
    listLower=new ArrayList<A1>(); //能存储 A1          B1 B2       C1 C2    D1 D2 E1 E2 E3 E4
    listLower=new ArrayList<A2>(); //能存储    A2          B2       C1 C2    D1 D2 E1 E2 E3 E4
    listLower=new ArrayList<A3>(); //能存储       A3          B3       C2 C3 D1 D2 E1 E2 E3 E4
    listLower=new ArrayList<A4>(); //能存储          A4       B3 B4    C2 C3 D1 D2 E1 E2 E3 E4
    listLower=new ArrayList<B2>(); //能存储                B2       C1 C2    D1 D2 E1 E2 E3 E4
    listLower=new ArrayList<B3>(); //能存储                   B3       C2 C3 D1 D2 E1 E2 E3 E4
    listLower=new ArrayList<C2>();// 能存储                            C2    D1 D2 E1 E2 E3 E4
    	}
    }

    /* <? super T> 与 <? extends T> 的区别,
     *  T 代表一个给定的类 
     * */
    import java.util.*;
    
    class A1{}
    class A2{}
    class A3{}
    class A4{}
    
    class B1 extends A1{} 
    class B2 extends A1{}
    class B3 extends A3{}
    class B4 extends A4{}
    
    class C1 extends B2{}
    class C2 extends B2{}
    class C3 extends B3{}
    
    class D1 extends C1{}
    class D2 extends C2{}
    
    class E1 extends D1{}
    class E2 extends D1{}
    class E3 extends D2{}
    class E4 extends D2{}
    
    public class UP_Class{	
    
    public static void main(String args[]){ 
    /********************************************
     * 此处 extends 表示 有上界的统配符 ?,上界为  C2
     * 由此定义的引用 listUpper可以作为 
     * 接下来的 7 种 子泛型类型的 ArrayList 的引用来使用。 
     **********************************************/
       List<? extends C2> listUpper;//统配符 ? 的上界为  C2
    listUpper=new ArrayList<C2>();//能存储 C2 D2 E3 E4
    listUpper=new ArrayList<D2>();//能存储 D2 E3 E4       
    listUpper=new ArrayList<E3>();           
    listUpper=new ArrayList<E4>();
    /*************************************************
     * super 表示有下界的统配符 ? ,下界为  C2 , 
     * 由此定义的引用 listLower 可以作为 
     * 接下来的 7 种 子泛型类型的 ArrayList 的引用来使用。  
     ***************************************************/
    List<? super C2> listLower;
    listLower=new ArrayList<A1>(); //能存储 A1 B1 B2 C1 C2    D1 D2 E1 E2 E3 E4
    listLower=new ArrayList<B2>(); //能存储 B2       C1 C2    D1 D2 E1 E2 E3 E4
    listLower=new ArrayList<C2>();// 能存储 D2 E3 E4
    	}
    }
  • 相关阅读:
    【Dubbo】2.7.x新增内容说明
    【Dubbo】架构各层及实现
    【Dubbo】服务提供方并发控制
    把缅彝语支语言中汉语同源词用汉字写出来会是怎样一种情况?
    Using HTTP Methods for RESTful Services
    An Introduction to CodeMix and Python Developmen
    [转]MySQL 前缀索引--------mysql索引指定指定一个前缀长度
    [git使用]Git的使用--如何将本地项目上传到Github(两种简单、方便的方法)
    [转]centos7搭建postfix邮件服务器
    [转]Ubuntu搭建简易Postfix邮箱服务器
  • 原文地址:https://www.cnblogs.com/liclBlog/p/15349495.html
Copyright © 2020-2023  润新知