泛型
提供了编译时类型安全检测和类型推断。
类型擦除:Java中的泛型在运行时会擦除泛型类型参数,表明运行时JVM不知道泛型类型参数的具体类型
类型擦除确保了泛型代码和非泛型代码的兼容性
泛型优点:
类型安全:泛型在编译时检查类型,避免了运行时类型转换的错误。提高代码的可读性和可维护性。
代码重用:泛型允许编写一次通用代码,可用于多种数据类型。减少重复代码,使代码更简洁,更易于维护。
提高代码质量:强制使用类型参数,减少错误的类型转换和类型不匹配的风险。提高代码质量,减少运行时错误。
提高代码可读性:明确指定了数据类型,使得代码更具可读性,便于其他开发人员理解和维护。
性能优化:泛型在编译时进行类型检查,意味着泛型不会引入运行时性能开销,避免了自动装箱和拆箱操作,从而提高性能。
格式:<类型>:指定一种类型的格式,可以任意书写,一般只写一个字母;例如:<E> <T>
<类型1,类型2...>:指定多种类型的格式,用逗号隔开,例如:<E,T><K,V>
泛型方法
定义格式:修饰符<类型> 返回值类型 方法名(类型 变量名){}
例: public <T> void show(T t){
System.out.println(t);
}
泛型接口:
定义格式:修饰符 interface 接口名<类型>{ }
例: punlic interface Generic<T>{ void show(T t);}
定义实现类时,定义和接口相同泛型,创建实现类对象明确泛型的具体类型
或定义实现类时,直接明确泛型的具体类型
类型通配符:<?>
1、ArrayList<?>:它的元素可以匹配任何类型,但不能向里添加元素,避免出现类型安全性问题
2、<? extends 类型>:表示是该类型或该类型的子类
3、<? super 类型>:表示是该类型或其父类