zoukankan      html  css  js  c++  java
  • 泛型

    什么是泛型?

    通过参数化类型(把类型当作参数传递,编译之前并不能确定具体的操作类型),使一段代码可以操作多种数据类型。

    我们肯定希望一个集合能够装不同类型的数据。比如String,Integer…… 虽然我们可以使用Object 来进行上溯造型
     但是我们下溯造型的时候并不能确定具体的类型,很难保证下溯造型的安全进行.
     这时泛型可以让集合不指定具体的使用类型(参数化类型),例如用<E>来代替具体的类型
    

    使用泛型

    泛型类

    class collection<E> {}
    

    泛型方法

      public E getAndSet(E e,int index){
         objs[index] = e;
         return (E)Objs[index];
     }
    

    泛型子类

     class diyCollection<E> extends MyCollection<E> {}
    

    类型通配符

        //通配符 下限 调用该方法时参数类型只能是Number及其子类
        public static void testGeneric(List<? extends Number > list){
        }
        //通配符 上限 参数类型只能是Number及其父类
        public static void testGeneric1(List<? super Number > list){
        }
    

    完整代码

    /**
     * 泛型类.
     * Object数组 存放指定类型的元素
     */
    class MyCollection<E> {
    
        Object[] objs = new Object[5];
    
        //泛型方法
        public void set(E e,int index){
            objs[index] = e;
        }
    
        //泛型方法
        public E get(int index){
            return (E)objs[index];
        }
    }
    
    //泛型子类
    class diyCollection<E> extends MyCollection<E> {
        @Override
        public E get(int index) {
            return super.get(index);
        }
    }
    
    
        @Test
        public void testCollection(){
            MyCollection<String> stringMyCollection = new MyCollection<>();
            stringMyCollection.set("abc",0);
            System.out.println(stringMyCollection.get(0));
    
            MyCollection<Integer> integerMyCollection = new MyCollection<>();
            integerMyCollection.set(66,0);
            System.out.println(integerMyCollection.get(0));
        }
    
        //通配符 下限 参数类型只能是Number及其子类
        public static void testGeneric(List<? extends Number > list){
        }
        //通配符 上限 参数类型只能是Number及其父类
        public static void testGeneric1(List<? super Number > list){
        }
    
  • 相关阅读:
    深入理解javascript的this关键字
    很简单的JQuery网页换肤
    有关垂直居中
    层的半透明实现方案
    常用meta整理
    web前端页面性能优化小结
    关于rem布局以及sprit雪碧图的移动端自适应
    mysql入过的坑
    日期格式化函数
    基于iframe父子页面传值的方法。
  • 原文地址:https://www.cnblogs.com/HappyKnockOnCode/p/15598337.html
Copyright © 2011-2022 走看看