要点:
泛型类是带有一个或多个类型参数的类
泛型方法是带有类型参数的方法
可以要求类型参数必须是一个或者多个类型的子类型
泛型类型是不变得:当S是T的子类型是,G<S>和G<T>没有关系
通过使用通配符G<? extends T>或者 G<? super T>,你可以指定一个方法接受一个带子类或父类参数的泛型类型的实例
当泛型类和方法被编译时,类型参数会被擦除
类型擦除对泛型有诸多限制。特别是,不能实例化泛型类或数组。不能转换成泛型类型,或者抛出一个泛型类型对象。
即使泛型类和方法在虚拟机中被擦除,你也可以在运行时找出他们是如何声明的。
1、泛型类
※类型参数不能用基本类型实例化。例如Entry<String, int>在Java中是无效的。
当构造一个泛型类对象时,可以在构造函数中省略类型参数。
1 Entry<String, Integer> entry = new Entry<>("1",1);
2、泛型方法
当声明一个反洗方法时,类型参数要放在修饰符之后,返回类型之前。当调用时,不要指定类型参数。它可以从方法的参数和返回类型中推断出来。
也可以在调用时候显示的写出来
1 public static <T> void swap(T[] array, int i, int j); 2 Arrays.<String>swap(friends,0,1);
3、类型限定
泛型类或方法的类型参数需要满足某些要求,或者是需要能够调用一些通用的方法。可以对类型做出限定。
T extends AutoCloseable
类型参数可以有多个限定: T extends Runnable & AutoCloseable
※可以有多个接口限定,但最多只能有一个是类。如果有一个限定是类,则它必须放在限定列表的第一位。
时间: 2024-11-07 11:39:30