【发布时间】:2020-03-09 10:24:46
【问题描述】:
当您传递 arraylist 时,我无法弄清楚 java 中的泛型方法是如何工作的。
所以基本上我有几个 DTO,例如:TypeAwesome、TypeGreat、TypeNotSoGreat
这些 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);
如您所见,我正在传递该列表。
我的目标是无论我发送的列表类型是什么,我都想获得该列表属性和吸气剂。
基本上我会收到这样的错误:
- 无法解析 T 中的方法“get”
- 无法解析 T 中的方法“大小”
- 无法解析 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 方法在该列表上工作,还有其他方法可以实现我想要实现的目标吗?
编辑:我已经进行了必要的修复并实现了基类,如 cmets 中所述: 基类:
public class Base {
public String rezultat;
public String status;
public String getRezultat() {
return rezultat;
}
}
我现在在上面遇到错误:
return fileHelper.checkFinalResult(list);
必填类型: 列表 假如: 列表 原因:不存在类型变量的实例,因此 TypeAwesome 符合 Base
这是什么意思,我必须创建那个实例才能使 TypeAwesome 符合 Base 吗?
【问题讨论】:
-
恕我直言,方法签名必须是
public <T> String checkFinalResult(List<T> list, Class<T> type) {...} -
@spa
type参数有什么意义?