首页 > 解决方案 > 接受任何类并返回数据的Java通用方法?

问题描述

在 Spring Batch 代码中,在编写 batchUpdate 时,我添加了异常处理,以防任何记录失败,我正在使用以下逻辑进行处理,它可以正常工作。但是我的项目中有大约 70 位作者,我想为以下代码创建一个通用方法,并在运行时传递 Employee、Department、Student、Stock 等类并取回详细信息。

我怎样才能做到这一点 ?

private List<Employee> getFailedRecords(Exception e, List<? extends Employee> items, Map<Integer, String> map){
    List<Employee> data = new ArrayList<>();
    if (e.getCause() instanceof BatchUpdateException) {
        BatchUpdateException be = (BatchUpdateException) e.getCause();
        int[] batchRes = be.getUpdateCounts();
        if (batchRes != null && batchRes.length > 0) {
            for (int index = 0; index < batchRes.length; index++) {
                if (batchRes[index] == Statement.EXECUTE_FAILED) {
                    data.add(items.get(index));
                    map.put(index, e.getMessage());
                }
            }
        }
    }
    return data;
}

标签: javajava-8

解决方案


您可以简单地使方法通用:

private <T> List<T> getFailedRecords(Exception e, List<? extends T> items, 
        Map<Integer, String> map) {
    
    List<T> data = new ArrayList<>();
    
    if (e.getCause() instanceof BatchUpdateException) {
        BatchUpdateException be = (BatchUpdateException) e.getCause();
        int[] batchRes = be.getUpdateCounts();
        if (batchRes != null && batchRes.length > 0) {
            for (int index = 0; index < batchRes.length; index++) {
                if (batchRes[index] == Statement.EXECUTE_FAILED) {
                    data.add(items.get(index));
                    map.put(index, e.getMessage());
                }
            }
        }
    }

    return data;
}

除非有界通配符是必需的(例如当您需要传递Employee/的子类列表时Student等),您应该可以省略它,并将第二个参数键入为List<T>.


推荐阅读