泛型在编译期起作用,编译过后就会擦除泛型信息
作用
编译期暴露集合中数据不一致的问题。
泛型的应用类型
泛型类
泛型类参数不支持基本类型变量
泛型相关的信息不回会进入到运行时阶段
通过使用者传入需要的类型,增强了编码的灵活性
@Data
public class GenericClassExample<T> {
//member这个成员变量的类型为T,T的类型由外部指定
private T member;
//泛型构造方法形参member的类型也为T,T的类型由外部指定
public GenericClassExample(T member){
this.member = member;
}
public T handleSomething(T target){
return target;
}
public String sayHello(String name){
return "Hello " + name;
}
public static <T> void printArray(T[] inputArray){
for (T element : inputArray){
System.out.printf("%s", element);
System.out.printf(" ");
}
System.out.println();
}
}
泛型接口
主要用于工厂生产逻辑中
public interface GenericIFactory<T,N> {
T nextObject();
N nextNumber();
}
泛型方法
泛型方法中定义的泛型,不受泛型类传入的泛型影响
public <T> void printArray(T[] inputArray){
for (T element : inputArray){
System.out.printf("%s", element);
System.out.printf(" ");
}
System.out.println();
}
泛型边界
定义泛型的上边界为E: <?extend E>
定义泛型的下边界为E: <?supper E>