You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:将重复的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 15:52:35