泛型方法的核心是将类型不确定部分参数化,以实现类型安全、避免强转和重复代码。典型应用包括:①枚举查找(需实现ientityenum接口);②对象转换(如map(source, class));③泛型数据容器(put/get配合class)。注意静态方法需显式声明类型参数,运行时需class辅助,避免滥用。

在工具类中写泛型方法,核心是把类型不确定的部分“参数化”,让一个方法能安全适配多种类型,同时避免手动强转、重复代码和运行时异常。关键不在炫技,而在解决实际痛点:比如枚举查找、对象转换、通用存取。
用泛型方法替代重复的枚举查找逻辑
每个枚举都写一遍 of(int code) 很累,还容易漏。统一抽成泛型工具方法,只要枚举实现公共接口(如 IEntityEnum),就能复用:
- 定义接口:public interface IEntityEnum { int getCode(); String getMsg(); }
- 工具方法:public static
Optional findByCode(Class enumClass, int code) - 内部遍历 enumClass.getEnumConstants(),比对 getCode(),返回对应枚举实例
- 调用时:Optional
result = EnumUtils.findByCode(Status.class, 1); —— 类型安全,无需强转
泛型对象转换工具(如 ModelMapper 封装)
实体转 DTO、DTO 转 VO 这类操作,如果返回 Object,调用方还得强转,既啰嗦又危险。泛型方法可直接返回目标类型:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 方法签名:public
D map(S source, ClassdestinationType) - 内部调用 modelMapper.map(source, destinationType),编译器自动推断 D
- 调用:UserDTO dto = mapper.map(user, UserDTO.class); —— 类型明确,IDE 可提示,无强转
泛型数据容器:一行存、类型安全取
当需要临时存各种类型的数据(如配置项、上下文参数),不用为每种类型定义字段,用 Map + 泛型方法更轻量:
- 存:public
void put(String key, T value) { data.put(key, value); } - 取:public
T get(String key, Class (推荐带 class 参数,比裸 (T) 强转更安全)type) { return type.cast(data.get(key)); } - 调用:String name = container.get("userName", String.class); —— 不会因类型错配抛 ClassCastException
注意几个实用细节
泛型方法不是万能胶,用对地方才优雅:
- 静态方法必须自己声明类型参数,不能依赖外部类的泛型(类泛型对静态方法不可见)
- 泛型擦除后运行时无法获取真实类型,所以反射、类型判断等场景需传入 Class
参数辅助 - 别为了泛型而泛型——单个类型确定的场景,直接写死更清晰;泛型的价值在于“一类问题一套解法”
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










