泛型类

2018-11-14  本文已影响7人  muyang_js的简书

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

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

格式: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);
    }
}

泛型高级(通配符)

        //泛型如果明确的写的时候, 前后必须一致
        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);

 }
上一篇下一篇

猜你喜欢

热点阅读