1 .使用遗留代码,利用注解让警告消失
@SuppressWarnings(“unchecked”)
2 不能用类型参数代替基本类型double要用Double
3 .查询只返回原始类型
if(a instanceof Pair< String>)是测试a是否是(任意类型)的一个Pair,与String无关
Pair < String> s=···;
s.getClass()同理,返回Pair.class
4 .不能创建参数化数组
Pair< String>[] table =new Pair< String>[10];错误
可以声明Pair< String>[],但不能用new Pair< String>[10]初始化
收集参数化类型对象,用ArrayList<Pair< String>>
5 .向参数个数可变的方法传递一个泛型类型的实例。
用@SafeVarargs标注来消除创建泛型数组的有关限制
6 .不能实例化类型变量
new T() ,new T[],T.class都是非法
7 .不能构造泛型数组
8 .不能再静态域或方法中引用类型变量
9 .不能抛出或捕获泛型类的实例
10 .消除对受查异常的检查
Block.< RuntimeException > throwAs ( t ) ;
11 .擦除后的冲突
要想支持擦除的转换 , 就需要强行限制一个类或类
型变量不能同时成为两个接口类型的子类, 而这两个接口是同一接口的不同参数化 。
class Employee implements Coinparable < Emp loyee > { . . . }
class Manager extends Employee implements Comparable < Manager >
{ . . . } / / Error
12 .无论 S 与 T 有什么联系, Pair< S> 与Pair < T>有什么联系
13 .可将参数化类型转换为一个原始类型
Pair< Employee>是原始类型Pair的子类型
14 .泛型类可以扩展或实现其他泛型类
ArrayList< T>类实现List< T>接口
ArrayList< T>可转换为List< T>
15 .通配符类型
Pair< ? extends Employee>
表示任何泛型Pair类型,类型参数时Employee的子类
但不能调用方法
void setFirst(Pair< ? extends Employee>)
16 .超类型限定:限制为Manager的所有超类型
? super Manager
17 . 带有超类型限定的通配符可以向泛型对象写入 带有子类型限定的通配符可以从泛型对象读取
void setFirst ( ? super Manager )
18 .超类可以辅助
public static < T extends Conparable < ? super T >> T min(T [ ] a)
19 .无限定通匹配符Pair< ?>
? getFirst ( )
void set First (?)
20 .反射允许你在运行时分析任意的对象
本文详细解析了Java泛型的使用限制与技巧,包括避免警告的注解使用、泛型数组的替代方案、泛型方法的参数传递、类型变量实例化的限制、泛型类的继承与实现、通配符类型的使用场景及限定条件等,帮助开发者深入理解并正确应用Java泛型。

被折叠的 条评论
为什么被折叠?



