java - 如何访问传递的通用数组列表中的元素

标签 java generics arraylist

当你传递 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/

相关文章:

java - Java 6 和 Java 7 ArrayList 容量增长的区别

java - 如何从 JComboBox 中的选定项目中获取包含 2 个项目的数组?

java - 开机后多次报警重启

java - 访问修饰符的可访问性

Scala:从 ClassTag 中检索类名

c# - 在 C# 中定义有界泛型类型参数

java - 如何使用 InputStream 从 ZIP 中读取文件?

java - Spring MVC : Bad request (parameter missing) on file upload even when required parameters are present

generics - F# 泛型函数过滤可区分联合列表

arraylist - 根据列表大小在Kotlin中初始化数组