当你传递 arraylist 时,我在弄清楚 java 中的泛型方法如何工作时遇到了问题。
所以基本上我有几个 DTO,例如:TypeAwesome、TypeGreat、TypeNotSoGreat
这些 DTO 从文本文件中读取(每个 DTO 都从自己的文件中读取),并且我有想要使用的 getter。
DTO 代表 csv 文件中的每一行,我将这些 DTO 对象保存到 ArrayList 中,如下所示:
ArrayList<TypeAwesome> list = new ArrayList<>();
for (int i = 1; i < lineCount; i++) {
typeAwesome = new TypeAwesome();
...
list.add(typeAwesome);
}
return fileHelper.checkFinalResult(list);
如您所见,我正在传递该列表。
我的目标是无论我发送的列表类型是什么,我都想获得该列表属性和 getter 。
基本上我收到这样的错误:
- 无法解析 T 中的“get”方法
- 无法解析 T 中的方法“size”
- 无法解析 T 中的“get”方法
foreach 不适用于 T 类型
public <T extends Base> String checkFinalResult(List<T> list) { String finalStatus = "FAIL"; List<String> statuses = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i).getRezultat()); String status = list.get(i).getRezultat().equalsIgnoreCase("OK") ? "PASS" : "FAIL"; statuses.add(status); // returns last result - to determine if whole test failed or not if (i == list.size() - 1) { if (list.get(i).getRezultat().equalsIgnoreCase("OK")) { finalStatus = "PASS"; } } } System.out.println("STATUSES: " + statuses); int index = 0; for (T item : list) { // get status item.status = statuses.get(index); System.out.println("ITEM STATUS " + item.status); index++; } return finalStatus; }
如何传递某种类型的 ArrayList 以便 get 方法在该列表上工作,是否有其他方法可以实现我想要实现的目标?
编辑:我已经进行了必要的修复并实现了基类,如评论中所述: 基类:
public class Base {
public String rezultat;
public String status;
public String getRezultat() {
return rezultat;
}
}
我现在在上面遇到错误:
return fileHelper.checkFinalResult(list);
所需类型: 列表 假如: 列表 原因:不存在类型变量的实例,因此 TypeAwesome 符合 Base
这是什么意思,我是否必须创建该实例才能使 TypeAwesome 符合 Base?
最佳答案
我相信您真正想要的是列表包含泛型类型。所以你的方法签名应该是:
public <T> checkFinalResults(List<T> list) {...}
这将使您传递当前的错误,但您正在尝试对列表的元素调用 getRezultat()
方法。如果每个 DTO 都扩展一个公共(public)基类或实现一个公共(public)接口(interface),那么您可以通过在泛型定义中指定来访问该类型的方法。例如
public <T extends HasRezultat> checkFinalResults(List<T> list) { ... }
关于java - 如何访问传递的通用数组列表中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60598581/