求助:将重复的Save方法改造为泛型方法以消除代码冗余
用泛型方法重构重复的保存逻辑
当然可以!你现在这些结构高度重复的方法,正好适合用Java泛型来统一处理,从此不用再为每一种新类型重复写几乎一样的代码了。
重构后的通用泛型方法
直接创建一个泛型方法,利用JpaRepository的通用特性来适配所有你的仓库接口:
private <T> void saveAllIfNotEmpty(JpaRepository<T, Long> repo, List<T> entityList) { if (entityList != null && !entityList.isEmpty()) { repo.saveAll(entityList); } }
代码细节解释
<T>:泛型类型参数,代表你要保存的实体类(比如A、B、C这类业务实体)JpaRepository<T, Long>:因为你的所有仓库接口(myObjA、myObjB)都继承了JpaRepository,所以用这个作为参数类型可以自动适配所有子接口List<T>:对应实体类的列表,和仓库的泛型类型保持一致,确保类型安全
调用示例
现在不管新增哪种类型,直接调用这个方法即可,编译器会自动推断泛型类型,完全不用额外指定:
// 替代原来的saveA调用 saveAllIfNotEmpty(myObjA, myListA); // 新增类型C后,直接调用 saveAllIfNotEmpty(myObjC, myListC);
扩展性补充
如果未来你的仓库主键类型不再是Long,还可以把主键类型也改成泛型参数,进一步提升方法的通用性:
private <T, ID> void saveAllIfNotEmpty(JpaRepository<T, ID> repo, List<T> entityList) { if (entityList != null && !entityList.isEmpty()) { repo.saveAll(entityList); } }
内容的提问来源于stack exchange,提问作者briba
相关产品推荐
相关产品推荐

