本帖最后由 寐海流风 于 2014-6-21 15:02 编辑
使用技巧
1)泛型在使用时确定类型,声明时不能使用在静态属性、静态方法上;
2)接口中,泛型字母只能使用在方法中,不能使用在全局常量中;
3)泛型方法,只能访问对象的信息,不能修改信息,没有set、get之类
4)方法形参与返回类型也不存在泛型多态;
5)不能使用instanceof判断是否为泛型实例,如:a instanceof A<String>;
泛型擦除
原则:要么同时擦除,要么子类>=父类的类型:属性类型(父类中,随父类定;子类中,随子类定——随位置而定);重写方法重写(随父类而定)。
1、子类与父类|接口一样使用泛型(在使用时确定,类型参数相同(可调换顺序));
2、子类(声明时确定)指定具体的类型,属性类型为具体类型,方法同理;
3、子类与父类|接口同时擦除类型();
4、子类泛型,父类|接口擦除(父类不指定类型,擦除统一使用Object替换);
5、错误:不能子类擦除,父类|接口使用泛型。——擦除统一使用Object对待。
泛型擦除后的警告
警告:
在使用时没有指定具体的类型;子类继承|实现时没有指定类型。——统一Object对待,有个编译警告。
处理:
1)擦除后不会类型检查;
2)一旦擦除之后按Object接收;
3)依然存在编译警告,加上Object可以去除(相当于Object,但是不完全等同Object),但有些画蛇添足。
JDK1.7泛型改进
JDK1.7改进——声明时指定泛型一次类型即可,使用|创建对象不用再次编写类型:A<String> a = newA<>();。
大家有泛型的什么技巧,可以共同分享学习下。 |
|