java - 接受任何类并返回数据的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;
}
解决方案
您可以简单地使方法通用:
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>
.
推荐阅读
- javascript - 点击反应后渲染元素
- linux - 附加到与 shell 中的特定键一致
- asp.net-mvc - 在视图 aspboilerplate 中呈现数据
- python - 使用虚拟环境安装 pip 时出现 TLS 错误
- bash - 如何让 bash 显示正在执行的命令_包括_重定向?
- qt - QtQuick 中 TextEdit 的属性 `text` 的绑定如何工作?
- php - Laravel - 查询的奇怪行为
- python - sklearn 功能不影响准确性
- php - 如果在页面中选中复选框,如何按分类获取帖子
- php - 为什么页面在提交表单后变为空白并在codeigniter中重定向之前设置set_flashdata