• 泛型的使用


    泛型的使用
            1. 在集合中使用泛型
            2.在定义泛型类,泛型接口,泛型方法
            3.泛型于继承的关系
            4.通配符

    注意:1.不可以在static方法中使用泛型的声明,因为静态方法的加载随着类的加载而加载,

                   泛型是在创建实例的时候加载的(晚)。

                2.不能在try-catch中使用类的泛型的声明

                   try{

                   }catch(T e){

                   }

    TestGeneric

    package com.aff.Gen;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    import org.junit.Test;
    
    /*
     泛型的使用
            1. 在集合中使用泛型
            2.在定义泛型类,泛型接口,泛型方法
            3.泛型于继承的关系
            4.通配符
     */
    public class TestGeneric {
    
        // 集合中没有使用泛型的情况下
        @Test
        public void test1() {
            List list = new ArrayList();
            list.add(23);
            list.add(35);
            list.add(56);
            list.add(new String("aa"));
    
            for (int i = 0; i < list.size(); i++) {
                int score = (Integer) list.get(i);
                System.out.println(score);
            }
        }
    
        
        
        
        // 1在集合中使用泛型
        @Test
        public void test2() {
            List<Integer> list = new ArrayList<Integer>();
            list.add(23);
            list.add(35);
            // list.add(new String("aa"));//添加不进去会报错的
            // for (int i = 0; i < list.size(); i++) {
            // System.out.println(list.get(i));
            // }
            Iterator<Integer> iterator = list.iterator();
            while (iterator.hasNext()) {
                System.out.println(iterator.next());
            }
        }
    
        
        
        // 泛型的使用
        @Test
        public void test3() {
            Map<String, Integer> map = new HashMap<String, Integer>();
            map.put("aa", 23);
            map.put("bb", 33);
            map.put("cc", 6543);
            map.put("dd", 276);
    
            Set<Map.Entry<String, Integer>> set = map.entrySet();
            for (Map.Entry<String, Integer> o : set) {
                System.out.println(o.getKey() + "----->" + o.getValue());
            }
        }
    
        
        
        // 自定义泛型类的使用
        @Test
        public void test4() {
            /*
             * 1.实例化泛型类的对象时,指明泛型的类型 指明以后,对应的类中所有使用泛型的位置,
    都变为实例化中指定的泛型的类型 * 2.如果我们自定义了泛型类,但是实例化时没有使用,那么默认类型是Object类的
    */ Order<Boolean> order = new Order<Boolean>(); // order.getT(); order.setT(true); System.out.println(order.getT()); order.add(); List<Boolean> list = order.list; System.out.println(list); SubOrder o = new SubOrder(); List<Integer> list1 = o.list; System.out.println(list1); // 通过对象调用泛型方法时,指明泛型方法的类型 Integer i = order.getE(23); double d = order.getE(3.8); Integer[] in = new Integer[] { 1, 12, 3, 3 }; List<Integer> list2 = new ArrayList<Integer>(); List<Integer> list3 = order.fromArrayToList(in, list2); System.out.println(list3); } // 泛型于继承的关系 //若类A是类B的子类,那么List<A> 就不是List<B>的子接口 /* 通配符 ? List<A> ,List<B>... 都是List<?>的子类 ? extends A 可以存放A及其A的子类 ? super A 可以存放A及其A的父类 */ @Test public void test5() { //泛型于继承的关系 Object obj = null; String str = "AA"; obj = str; Object[] obj1 = null; String[] str1 = new String[]{"AA","CV","SV"}; obj1 = str1; List<Object> list10 = null; List<String> list11 = new ArrayList<String>(); //list10 = list11; //执行不通过,list11不是list10的子接口 // 通配符 ? List<?> list = null; List<Object> list1 = new ArrayList<Object>(); List<Object> list2 = new ArrayList<Object>(); list = list1; list= list2; show(list1); show1(list1); show1(list2);

    List<?> list20 = list1;
    //读取声明为通配符的集合类的对象
    Iterator<?> iterator = list20.iterator();
    while(iterator.hasNext()){
    system.out.println(iterator.next());
    }
    //不允许向声明为通配符的集合类中写入对象,唯一列外的是null
    list20.add();
    List
    <? extends Number> list3 = null; List<Integer> list4 = null; list3 = list4; List<? super Number> list5 = null;//super Number 为Object 所以和list1一致了 list5 = list1;
    }
    public void show(List<Object> list){ } public void show1(List<?> list){ } }

    Order<T>

    package com.aff.Gen;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Order<T> {
        private String orderName;
        private int orderId;
        private T t;
        List<T> list = new ArrayList<T>();
    
        public void add() {
            list.add(t);
        }
    
        // 实现数组到集合的复制
        public <E> List<E> fromArrayToList(E[] e, List<E> list) {
            for (E e1 : e) {// 数组
                list.add(e1);// 数组到集合
            }
            return list;
        }
    
        // 声明泛型方法
        public <E> E getE(E e) {
            return e;
        }
    
        public String getOrderName() {
            return orderName;
        }
    
        public void setOrderName(String orderName) {
            this.orderName = orderName;
        }
    
        public int getOrderId() {
            return orderId;
        }
    
        public void setOrderId(int orderId) {
            this.orderId = orderId;
        }
    
        public T getT() {
            return t;
        }
    
        public void setT(T t) {
            this.t = t;
        }
    
        @Override
        public String toString() {
            return "Order [orderName=" + orderName + ", orderId=" + orderId + ", t=" + t + ", list=" + list + "]";
        }
    }
    
    // 在继承泛型类或者泛型接口时,可以指明泛型的类型
    class SubOrder extends Order<Integer> {
    
    }
    All that work will definitely pay off
  • 相关阅读:
    洛谷P5979 [PA2014]Druzyny
    洛谷P5592 美德的讲坛
    BZOJ4231 回忆树
    Python爬虫〇二———从几个简单的爬虫开始
    Flink实例(115):自定义时间和窗口的操作符(十四)窗口操作符(四)触发器(Triggers) (二)
    商业化数据分析师(三十二):平台商品画像实战项目(三)购物篮分析
    商业化数据分析师(三十一):平台商品画像实战项目(二)如何构建商品画像-- 以移动电源为例
    商业化数据分析师(三十):平台商品画像实战项目(一)简介
    商业化数据分析师(二十九):平台用户画像实战项目(二)如何构建平台用户的用户画像
    商业化数据分析师(二十八):平台用户画像实战项目(一)什么是用户画像体系以及商户用户画像和平台用户画像的区别
  • 原文地址:https://www.cnblogs.com/afangfang/p/12592340.html
Copyright © 2020-2023  润新知