Java泛型
Java泛型是JDK 5引入的特性,通过参数化类型实现编译时类型检查,消除强制类型转换,提升代码安全性和复用性。
定义与作用
泛型本质是参数化类型,允许在类、接口或方法中使用类型参数(如T),具体类型在使用时指定。核心作用包括:
- 类型安全:编译时检测非法类型,避免运行时
ClassCastException。 - 消除强制转换:减少显式类型转换,提升代码可读性。
- 性能优化:避免装箱/拆箱操作,提高集合处理效率。
- 代码复用:同一逻辑可处理多种数据类型。
语法与使用
- 泛型类:类名后加尖括号定义类型参数,如
public class Box<T>。 - 泛型接口:接口定义类型参数,实现类指定具体类型,如
List<String>。 - 泛型方法:方法声明中使用类型参数,如
public <T> T genercMethod(T t)。 - 通配符:
<?>:无界通配符,接受任意类型(只读)。<? extends T>:上界通配符,接受T或其子类(生产者)。<? super T>:下界通配符,接受T或其父类(消费者)。5. 项目中泛型规范的应用
- 根据项目中的经验总结:
泛型方法参数设计规范:当方法需要接收任意类型的 List 参数时,应使用 List<?> 而非 List<Object> 作为参数类型,以避免泛型类型不兼容问题,同时保持类型安全性。
// 在类中定义类型参数 T
public class Box<T> {
private T item;
public void set(T item) {
this.item = item;
}
public T get() {
return item;
}
}
// 在方法中定义类型参数 T
public static <T> void swap(List<T> list, int i, int j) {
T temp = list.get(i);
list.set(i, list.get(j));
list.set(j, temp);
}
public <T extends com.alibaba.excel.metadata.BaseRowModel> void writeClazz2Excel(Class<T> clazz, List<T> list, String fileName, String exportType) {
ExportWriter exportWriter = null;
try {
exportWriter = WriterFactory.getExportWriter(exportType == null ? "csv" : exportType, fileName);
exportWriter.writeTitle(clazz);
exportWriter.appendContent(list, clazz);
} catch (Exception e) {
log.error("导出失败", e);
throw new BaseException("导出失败");
} finally {
if (exportWriter != null) {
exportWriter.close();
}
}
}
泛型中的K、T、V、E、?等的含义
K、T、V、E、N这些字母没什么区别,都可以互换使用。一般我们会使用常用的字母,这些字母都是一些类型的缩写,如:
- E:Element的缩写,一般在集合中使用,表示集合中的元素类型。
- T:Type的缩写,一般表示Java类。
- K:Key的缩写,一般用来表示键,如map中的key。
- V:Value的缩写,和key是一对,表示值。
- N:Number的缩写,通常用来表示数值类型。
在实际开发中,选择使用 T 还是 ? 主要取决于你的需求:
- 如果需要在代码中保持类型一致性,使用 T
- 如果只是需要引用泛型类型而不操作其内部元素,使用 ?
- 如果需要操作泛型内部元素,根据具体需求选择合适的限定符
1246

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



