初学泛型

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

简单泛型


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;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值