zoukankan      html  css  js  c++  java
  • JAVA学习--泛型的使用

     * 泛型的使用
     * 1.在集合中使用泛型(掌握)
     * 2.自定义泛型类、泛型接口、泛型方法(理解 --->使用)
     * 3.泛型与继承的关系
     * 4.通配符
     *    

    ----------------------------------------------------------------------------------------------------------

     1 //1.在集合中没有使用泛型的情况下
     2     @Test
     3     public void test1(){
     4         List list = new ArrayList();
     5         list.add(89);
     6         list.add(87);
     7         list.add(67);
     8         //1.没有使用泛型,任何Object及其子类的对象都可以添加进来
     9         list.add(new String("AA"));
    10         
    11         for(int i = 0;i < list.size();i++){
    12             //2.强转为int型时,可能报ClassCastException的异常
    13             int score = (Integer)list.get(i);
    14             System.out.println(score);
    15         }
    16     }
     1  //2.在集合中使用泛型
     2     @Test
     3     public void test2(){
     4         List list = new ArrayList();
     5         list.add(78);
     6         list.add(87);
     7 //        list.add("AA");
     8        
     9 //        for(int i = 0;i < list.size();i++){
    10 //            int score = list.get(i);
    11 //            System.out.println(score);
    12 //        }
    13         Iterator it = list.iterator();
    14         while(it.hasNext()){
    15             System.out.println(it.next());
    16         }
    17     }
     1 //泛型遍历
     2 
     3     @Test
     4     public void test3(){
     5         Map map = new HashMap<>();
     6         map.put("AA", 78);
     7         map.put("BB", 87);
     8         map.put("DD", 98);
     9        
    10         Set> set = map.entrySet();
    11         for(Map.Entry o : set){
    12             System.out.println(o.getKey() + "--->" + o.getValue());
    13         }
    14     }
     1 //自定义泛型类的使用
     2     @Test
     3     public void test4(){
     4         //1.当实例化泛型类的对象时,指明泛型的类型。
     5         //指明以后,对应的类中所有使用泛型的位置,都变为实例化中指定的泛型的类型
     6         //2.如果我们自定义了泛型类,但是在实例化时没有使用,那么默认类型是Object类的
     7         Order order = new Order();
     8 //        order.getT();
     9         order.setT(true);
    10         System.out.println(order.getT());
    11         order.add();
    12         List list = order.list;
    13         System.out.println(list);
    14        
    15         SubOrder o = new SubOrder();
    16         List list1 = o.list;
    17         System.out.println(list1);
    18         //当通过对象调泛型方法时,指明泛型方法的类型。
    19         Integer i = order.getE(34);
    20         Double d = order.getE(2.3);
    21        
    22         Integer[] in = new Integer[]{1,2,3};
    23         List list2 = new ArrayList<>();
    24         List list3 = order.fromArrayToList(in, list2);
    25         System.out.println(list3);
    26     }
     1 //自定义泛型类的使用
     2     @Test
     3     public void test4(){
     4         //1.当实例化泛型类的对象时,指明泛型的类型。
     5         //指明以后,对应的类中所有使用泛型的位置,都变为实例化中指定的泛型的类型
     6         //2.如果我们自定义了泛型类,但是在实例化时没有使用,那么默认类型是Object类的
     7         Order order = new Order();
     8 //        order.getT();
     9         order.setT(true);
    10         System.out.println(order.getT());
    11         order.add();
    12         List list = order.list;
    13         System.out.println(list);
    14        
    15         SubOrder o = new SubOrder();
    16         List list1 = o.list;
    17         System.out.println(list1);
    18         //当通过对象调泛型方法时,指明泛型方法的类型。
    19         Integer i = order.getE(34);
    20         Double d = order.getE(2.3);
    21        
    22         Integer[] in = new Integer[]{1,2,3};
    23         List list2 = new ArrayList<>();
    24         List list3 = order.fromArrayToList(in, list2);
    25         System.out.println(list3);
    26     }
    27 
    28 class Order {
    29     private String orderName;
    30     private int orderId;
    31     private  T t;
    32     List list = new ArrayList<>();
    33    
    34     public void add(){
    35         list.add(t);
    36     }
    37     public  T getT(){
    38         return t;
    39     }
    40     public void setT(T t){
    41         this.t = t;
    42     }
    43     //不可以在static方法中使用泛型的声明
    44 //    public static void show(){
    45 //        System.out.println(t);
    46 //    }
    47     public void info(){
    48         //不可以在try-catch中使用类的泛型的声明
    49 //        try{
    50 //           
    51 //        }catch(T e){
    52 //           
    53 //        }
    54     }
    55     //声明泛型方法
    56     public static E getE(E e){
    57         return e;
    58     }
    59     //实现数组到集合的复制
    60     public List fromArrayToList(E[] e,List list){
    61         for(E e1 : e){
    62             list.add(e1);
    63         }
    64         return list;
    65     }
    66    
    67     public String getOrderName() {
    68         return orderName;
    69     }
    70     public void setOrderName(String orderName) {
    71         this.orderName = orderName;
    72     }
    73     public int getOrderId() {
    74         return orderId;
    75     }
    76     public void setOrderId(int orderId) {
    77         this.orderId = orderId;
    78     }
    79     @Override
    80     public String toString() {
    81         return "Order [orderName=" + orderName + ", orderId=" + orderId
    82                 + ", t=" + t + "]";
    83     }
    84 }
    85 //继承泛型类或泛型接口时,可以指明泛型的类型
    86 class SubOrder extends Order{
    87    
    88 }
     1 * 泛型与继承的关系:
     2      * 若类A是类B的子类,那么List就不是List的子接口
     3 
     4     @Test
     5     public void test5(){
     6         Object obj = null;
     7         String str = "AA";
     8         obj = str;
     9        
    10         Object[] obj1 = null;
    11         String[] str1 = new String[]{"AA","BB","CC"};
    12         obj1 = str1;
    13        
    14         List list = null;
    15         List list1 = new ArrayList();
    16 //        list = list1;
    17         //假设list = list1满足
    18         //list.add(123);
    19         //String str = list1.get(0);//出现问题,所以假设不满足
    20     }
    *  通配符  ?
         *  List< A > 、List< B > 、。。。。都是List< ? >的子类
         *
         *  ? extends A :可以存放A及其子类
         *  ? super A:可以存放A及其父类
     
     1 @Test
     2     public void test6(){
     3         List < ? > list = null;
     4         List< Object > list1 = new ArrayList< Object >();
     5         List< String > list2 = new ArrayList< String >();
     6         list = list1;
     7         list = list2;
     8        
     9         show(list1);
    10 //        show(list2);
    11         show1(list1);
    12         show1(list2);
    13        
    14         List< ? extends Number > list3 = null;
    15         List< Integer > list4 = null;
    16         list3 = list4;
    17 //        list3 = list1;
    18         List< ? super Number > list5 = null;
    19         list5 = list1;
    20     }
    21     
    22     public void show(List< Object > list){
    23         
    24     }
    25     public void show1(List< ? > list){
    26         
    27     }

     

    * 通配符的使用
     1  @Test
     2     public void test7(){
     3         List list = new ArrayList();
     4         list.add("AA");
     5         list.add("BB");
     6         List< ? > list1 = list;
     7         //可以读取声明为通配符的集合类的对象
     8         Iterator< ? > iterator = list1.iterator();
     9         while(iterator.hasNext()){
    10             System.out.println(iterator.next());
    11         }
    12         //不允许向声明为通配符的集合类中写入对象。唯一例外的是null
    13 //        list1.add("CC");
    14 //        list1.add(123);
    15         list1.add(null);
    16     }
  • 相关阅读:
    java代码 分解EXCEL(一)
    hdu 1226 BFS + bfs记录路径
    MVC-MODEL
    弱类型、强类型、动态类型、静态类型语言的区别是什么?
    Objective-C中的命名前缀说明
    self & this 上下文
    Object comparison
    Dynamic typing 动态类型
    iOS支付宝 9.x 版本首页效果
    Using an Image for the Layer’s Content
  • 原文地址:https://www.cnblogs.com/zhangfan94/p/4263348.html
Copyright © 2011-2022 走看看