首页 > 解决方案 > 将方法转换为通用方法以避免重复代码

问题描述

我在以下方面需要一些帮助:我多次调用如下所示的方法:

private void saveA(myObjA myObj, List<A> myList) {
    if (myList != null && !myList.isEmpty()) {
        myObj.saveAll(myList);
    }
}

private void saveB(myObjB myObj, List<B> myList) {
    if (myList != null && !myList.isEmpty()) {
        myObj.saveAll(myList);
    }
}

...

接口示例:

public interface myObjA
    extends JpaRepository<A, Long> {

}

public interface myObjB
    extends JpaRepository<B, Long> {

}

...

问题是我正在为所有其他调用(myObjB、myListB、myObjC、myListC)创建一个新的。myObj 实际上是一个接口,第二个参数始终是某个对象的列表。有没有办法将此方法转换为单个方法并在调用中指定对象类型?

标签: javalistjpagenerics

解决方案


这可以使用通用方法来完成:

public <T, N> void save(JpaRepository<T, N> repo, List<T> list) {
    if (null != list && !list.isEmpty()) {
        repo.saveAll(list);
    }
}

// usage
@Autowired
private MyRepo repository;  // MyRepo implements JpaRepository<MyObj, Long>

public void foo(List<MyObj> list) {
    save(repository, list);
}

推荐阅读