初学泛型

来源:互联网 发布:c语言可以用else if 编辑:程序博客网 时间:2024/06/18 01:15

刚刚开始看泛型,泛型是一个容器,既然是容器,那么里面就能放任何东西,
就是任何对象。
创建一个泛型类很简单,像下面这样就是创建了一个简单的泛型类型

简单泛型

public class Holder<T> {    private T a;    public Holder(T a) {        this.a = a;    }    public T getA() {        return a;    }    public void setA(T a) {        this.a = a;    }    public static void main(String[] args) {        Holder<Automobile> Holder =                 new Holder<Automobile>(new Automobile());        Automobile automobile = Holder.getA();        automobile.say();    }}class Automobile {    public void say(){        System.out.println("111");    }}
Holder<Automobile> Holder = new Holder<Automobile>(new Automobile());

“<>”里面可以是任意类型

多个泛型持有者

public class TestGenericFoo {    public static void main(String[] args) {        //可以分别以 String 和 Integer 设置 T1, T2 的真实类型        GenericFoo<String, Integer> foo =                     new GenericFoo<String, Integer>();        foo.setFoo1("jack");        foo.setFoo2(99);}class GenericFoo<T1, T2> {    private T1 foo1;    private T2 foo2;    public T1 getFoo1() {        return foo1;    }    public void setFoo1(T1 foo1) {        this.foo1 = foo1;    }    public T2 getFoo2() {        return foo2;    }    public void setFoo2(T2 foo2) {        this.foo2 = foo2;    }}

也可以用于声明数组

public class TestGenericFoo {    public static void main(String[] args) {        //也可以用于声明数组        String [] strArray = {"one", "two", "three"};         GenericFooArray<String> fooArray =                         new GenericFooArray<String>();        fooArray.setFooArray(strArray);//      System.out.println(fooArray.getFooArray()[0]);}//GenericFoo 数组class GenericFooArray<T> {    private T[] fooArray;    public T[] getFooArray() {        return fooArray;    }    public void setFooArray(T[] fooArray) {        this.fooArray = fooArray;    }}

泛型限制可用类型

public class TestGenericFoo {    public static void main(String[] args) {        //泛型限制可用类型,比如限制只有继承了List才可使用        ArrayList<String> arrayList =                 new ArrayList<String>();        arrayList.add("1");        arrayList.add("2");        //如果此处不是继承List的类会编译出错        GenericFooList<ArrayList> fooList =                         new GenericFooList<ArrayList>();        fooList.setFooList(arrayList);    }}//泛型限制可用类型,比如限制只有继承了List才可使用class GenericFooList<T extends List> {/*GenericFooList<T extends List<String>> 这么定义的话 GenericFooList 就只能用ArrayList<String>实例化  GenericFooList<ArrayList<String>> fooList =                   new GenericFooList<ArrayList<String>>();用ArrayList<Integer> 会编译出错GenericFooList<ArrayList<Integer>> fooList =                   new GenericFooList<ArrayList<Integer>>();*/    private T fooList;    public T getFooList() {        return fooList;    }    public void setFooList(T fooList) {        this.fooList = fooList;    }}
0 0
原创粉丝点击