簡體   English   中英

Java 接受任何 class 並返回數據的通用方法?

[英]Java Generic method for accept any class and return data?

在 Spring 批處理代碼中,在編寫 batchUpdate 時,我添加了異常處理,以防任何記錄失敗,我正在使用以下邏輯進行處理,效果很好。 但是我的項目中有大約 70 位作者,我想為以下代碼創建一個通用方法,並在運行時傳遞 Employee、Department、Student、Stock 等 class 並獲取詳細信息。

我怎樣才能做到這一點?

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;
}

您可以簡單地使方法通用:

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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM