Java泛型

Java泛型

Java泛型是JDK 5引入的特性,通过参数化类型实现编译时类型检查,消除强制类型转换,提升代码安全性和复用性。‌

定义与作用

泛型本质是参数化类型,允许在类、接口或方法中使用类型参数(如T),具体类型在使用时指定。核心作用包括:‌

  1. 类型安全‌:编译时检测非法类型,避免运行时ClassCastException。‌
  2. 消除强制转换‌:减少显式类型转换,提升代码可读性。‌
  3. 性能优化‌:避免装箱/拆箱操作,提高集合处理效率。‌
  4. 代码复用‌:同一逻辑可处理多种数据类型。‌‌

语法与使用

  1. 泛型类‌:类名后加尖括号定义类型参数,如public class Box<T>。‌‌
  2. 泛型接口‌:接口定义类型参数,实现类指定具体类型,如List<String>。‌
  3. 泛型方法‌:方法声明中使用类型参数,如public <T> T genercMethod(T t)。‌
  4. 通配符‌:
    • <?>:无界通配符,接受任意类型(只读)。
    • <? extends T>:上界通配符,接受T或其子类(生产者)。
    • <? super T>:下界通配符,接受T或其父类(消费者)。‌5. 项目中泛型规范的应用
  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
  • 如果只是需要引用泛型类型而不操作其内部元素,使用 ?
  • 如果需要操作泛型内部元素,根据具体需求选择合适的限定符
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值