泛型类

作者: muyang_js的简书 | 来源:发表于2018-11-14 16:02 被阅读7次

    注意:泛型类型必须是引用类型

    泛型类,把泛型定义在类上

    格式:public class 类名<泛型类型1,…>

    把泛型定义在方法上

    格式:public <泛型类型> 返回类型 方法名(泛型类型 .)
    class ObjectTool<T> {
        private T obj;
        public  T getObj() {
            return obj;
        }
        public void setObj(T obj) {
            this.obj = obj;
        }
    }
    

    泛型方法

    class YEObjectTool {
        public <T> void show(T t) {
            System.out.println(t);
        }
    }
    

    泛型接口

    把泛型定义在接口上

    格式:public interface 接口名<泛型类型1…>
    interface YEInter<T> {
        public  abstract  void show(T t);
    }
    

    实现类在实现接口的时候, 我们会遇到两种情况

    第一种情况:已经知道是什么类型了

    class YEInterImpl implements YEInter<String> {
    
        @Override
        public  void show(String t) {
            System.out.println(t);
        }
    }
    

    第二种:还不知道是什么类型

    class YEInterImpl2<T> implements YEInter<T> {
    
        @Override
        public  void show(T t) {
            System.out.println(t);
        }
    }
    

    泛型高级(通配符)

    • 泛型通配符 < ?>
      任意类型,如果没有明确,那么就是Object以及任意的Java类了
    • ? extends E
      向下限定,E及其子类
    • ? super E
      向上限定,E及其父类
            //泛型如果明确的写的时候, 前后必须一致
            Collection<Object> c1 = new ArrayList<Object>();
    
            //? 表示任意的类型都是可以的
            Collection<?> c5 = new ArrayList<Object>();
            Collection<?> c6 = new ArrayList<Animal>();
            Collection<?> c7 = new ArrayList<Dog>();
            Collection<?> c8 = new ArrayList<Cat>();
    
            // ? extends E:向下限定, E及其子类
            Collection<? extends Animal> c10 = new ArrayList<Animal>();
            Collection<? extends Animal> c11 = new ArrayList<Dog>();
    
            // ? super E: 向上限定, E及其父类
            Collection<? super Animal> c12 = new ArrayList<Object>();
            Collection<? super Animal> C13 = new ArrayList<Animal>();
    

    main函数中调用泛型类

     public static void main(String[] args) {
    
            ArrayList<String> list = new ArrayList<String> ();
            list.add("hello");
            list.add("world");
            list.add("yongen");
    //     list.add(10);
    
            System.out.println("list:====="+list);
            Iterator<String>  it = list.iterator();
            while (it.hasNext()) {
                //String s = (String) it.next();
                String s = it.next();
                System.out.println("s:======" + s);
            }
    
    
           ======================================================= 
           =============    泛型类ObjectTool      ================= 
           ======================================================= 
    
            ObjectTool<String > ot = new ObjectTool<String>();
            ot.setObj("胡歌");
            ot.setObj(new String("李宗伟"));
            String s = ot.getObj();
            System.out.println("姓名是:====" + s);
    
    
            ObjectTool<Integer> ot2 = new ObjectTool<Integer>();
            ot2.setObj(new  Integer(10));
            Integer i = ot2.getObj();
            System.out.println("数字是:=====" + i);
    
    
           ======================================================= 
           ================   泛型方法   show      ================ 
           =======================================================
            YEObjectTool yot = new YEObjectTool();
            yot.show("Hello");
            yot.show(100);
            yot.show(true);
    
    
           ======================================================= 
           ===============      泛型接口 YEInter    =============== 
           =======================================================
    
            //第一种情况测试
            YEInter<String> i13 = new YEInterImpl();
            i13.show("hello");
    
            //第二种情况测试
            YEInter<String> i131 = new YEInterImpl2<String>();
            i131.show("javaeerr");
    
            YEInter<Integer> i132 = new YEInterImpl2<Integer>();
            i132.show(120);
    
     }
    

    相关文章

      网友评论

          本文标题:泛型类

          本文链接:https://www.haomeiwen.com/subject/gijjfqtx.html