首先需要明确的是:
泛型的使用类型应为引用类型,不能为基本类型。
泛型:1,安全:list.add(); 只能加泛型中的定义类型。
2,省心:get(); 无须类型转换。
自定义泛型类的注意点:
1,<>里面存放单个大写字母,尽可能见名知意。
2,常见的泛型字母:T——type,K——key,V——value,E——element。
3,泛型不能使用在静态属性。
自定义泛型接口的注意点:
泛型不能使用在全局常量上。
自定义泛型方法的注意点:
在返回类型前面加<字母> 如:public static <T> void test(){}
泛型子类继承父类的4中方式:
/**
* 泛型父类
*
*/
public abstract class Father<T1,T2> {
}
//保留
//1,全保留
class Son1<T1, T2> extends Father<T1,T2>{
}
//2,部分保留
class Son2<T1> extends Father<T1, String>{
}
//不保留
//1,具体类型
class Son3 extends Father<String, Integer>{
}
//2,没有类型 擦除 Object
class Son4 extends Father{
}
泛型的上限和下限:
通配符?:类型不确定,用于声明变量/形参。不能用于创建对象,泛型类,泛型接口…
void test(<? extends Fruit> list){}
extends:表示上限,表示类型只能为Fruit与它的子类。
void test(<? super Fruit> list){}
supers:表示下限,表示类型只能是Fruit与它的父类。