基础:泛型

2019-04-22  本文已影响0人  Bitson

泛型例子

class Mother<T1> {

    T1 t1;

    void setT1(T1 t1) {

        this.t1 = t1;

    }

    T1 getT1() {

        return this.t1;

    }

}

泛型继承

class Son<T1, T2> extends Mother<T1> {

    T2 t2;

    void setT2(T2 t2) {

        this.t2 = t2;

    }

    T2 getT2() {

        return this.t2;

    }

}

继承时不指定夫类类型的话,T1会自动变成Object类型

class Mother2<T1> {
    T1 t1;

    void setT1(T1 t1) {
        this.t1 = t1;
    }

    T1 getT1() {
        return this.t1;
    }
}

class Son<T2> extends Mother2 {

    T2 t2;

    void setT2(T2 t2) {

        this.t2 = t2;

    }

    T2 getT2() {

        return this.t2;

    }

}

// 测试代码
Son2<Integer> son2 = new Son2<>(); // 在创建son2引用的时候,Mother2中的T1自动变成Object类型
son2.setT1("some"); // 可以接收字符串“some”,应为String也是Object的子类
son2.setT2(123);
System.out.println(son2.getT1());
System.out.println(son2.getT2());

限制泛型可用类型

class Limit {

    @Override

    public String toString() {

        return "this is bitson";

    }

}

class SubLimit extends Limit {}

class Mother<T1 extends Limit> { // 这里限制类类型T1必须要是Limit类的子类
    T1 t1;

    void setT1(T1 t1) {
        this.t1 = t1;
    }

    T1 getT1() {
        return this.t1;
    }
}

class Son<T1 extends Limit, T2> extends Mother<T1> { 
    //这里继承Mother的时候必须指定T1是Limit类的子类
    T2 t2;

    void setT2(T2 t2) {
        this.t2 = t2;
    }

    T2 getT2() {
        return this.t2;
    }
}

// 测试方法中运行如下代码
Son<SubLimit, Integer> son = new Son<>(); // son引用的第一个参数必须是继承类Limit的子类
son.setT1(new SubLimit());
System.out.println(son.getT1());

使用类型通配符:“?”

class Limit {
    @Override
    public String toString() {
        return "this is bitson";
    }
}

class SubLimit extends Limit {}

class SubLimit2 extends Limit {}

class Mother<T1 extends Limit> {
    T1 t1;

    void setT1(T1 t1) {
        this.t1 = t1;
    }

    T1 getT1() {
        return this.t1;
    }
}

class Son<T1 extends Limit, T2> extends Mother<T1> {
    T2 t2;

    void setT2(T2 t2) {
        this.t2 = t2;
    }

    T2 getT2() {
        return this.t2;
    }
}

// 测试代码
Son<? extends Limit, Integer> son = null; // 使用类型通配符的话,可以引用Son<SubLimit, Integer>类型或者是Son<SubLimit2, Integer>()类型的实例
son = new Son<SubLimit, Integer>(); 
son = new Son<SubLimit2, Integer>();
上一篇 下一篇

猜你喜欢

热点阅读