√ JavaSE - 22.怎么使用泛型(卷1 P326 P328 P330 P331 P333 P338 P346 P348 P354)

  1. 类型变量(T、S、U、……)不能是基本数据类型,只能是引用数据类型,默认为Object类。
  2. 自定义泛型类或泛型接口时,类型变量在类名或接口名的后面;自定义泛型方法时,类型变量在修饰符的后面,返回值类型的前面。
  3. 通过关键字extends对类型变量加以约束,类型变量和限定类型可以是类,也可以是接口。
  4. 最多有一个限定类型是类,可以有多个限定类型是接口;多个类型变量用“,”分隔,多个限定类型用“&”分隔。
  5. 具有继承关系的类型作为泛型使用时,两个泛型类不再具有继承关系,但可以利用通配符“?”作为其公共父类。
  6. 有限制条件的通配符只能传入限制的类型。
  7. 无论何时定义一个泛型类型,都会自动提供一个相应的原始类型,即类型变量会被擦除,并替换为限定类型,对于无限定的变量则替换为Object类。
import java.util.*;

public class GenericTest {
    public static void main(String[] args) {
        Class1 class1 = new Class1();
        Class2 class2 = new Class2();
        Test1 test1 = new Test1();
        Test2 test2 = new Test2();
        Test<? extends Class1, ? super Test2> test3;
        test3 = new Test<Class1, Test2>(class1, test2);
        test3 = new Test<Test1, Test2>(test1, test2);
    }
}

class Test<T extends Class1, S extends Class2 & Interface1> {
    private T t;
    private S s;

    public Test(T t, S s) {
        System.out.println("Test");
        this.t = t;
        this.s = s;
    }

    public <U extends T> void print1(U u) {
        System.out.println("print1");
        System.out.println(u);
    }

    public <U extends S> void print2(U u) {
        System.out.println("print2");
        System.out.println(u);
    }

    public void print3(List<? extends Class1> list) {
        System.out.println("print3");
    }

    public void print4(List<? super Test2> list) {
        System.out.println("print4");
    }
}

class Class1 {
    public Class1() {
        System.out.println("Class1");
    }
}

class Class2 {
    public Class2() {
        System.out.println("Class2");
    }
}

interface Interface1 {

}

class Test1 extends Class1 {
    public Test1() {
        System.out.println("Test1");
    }
}

class Test2 extends Class2 implements Interface1 {
    public Test2() {
        System.out.println("Test2");
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值