You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

代码报冗余类型参数错误,如何修正并读取数据至ArrayList?

解决Java ArrayList初始化错误与文件读取优化

嗨,我来帮你搞定这个问题!首先咱们先拆解你遇到的两个核心问题:菱形运算符的使用和代码里的语法/资源管理漏洞。

1. 先修正冗余类型参数的错误

你写的ArrayList storeList = new ArrayList<USCrimeClass>;有两个明显问题:

  • 少了实例化必需的括号(),属于语法错误
  • Java 7及以后版本支持菱形运算符<>,不需要在new ArrayList后面重复写<USCrimeClass>,编译器会自动推断前面声明的泛型类型

正确的初始化写法应该是:

// 明确泛型类型+菱形运算符+实例化括号
ArrayList<USCrimeClass> storeList = new ArrayList<>();

这样既解决了冗余类型参数的警告,又保证了集合的类型安全性,避免后续add元素时出现不必要的类型转换问题。

2. 完善文件读取的资源管理与代码完整性

你的代码还有几个需要补全的细节,比如资源自动关闭、异常处理,以及代码块的闭合逻辑:

修正后的完整代码示例

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class CrimeDataReader {
    public static void main(String[] args) {
        String inFile = "你的数据文件路径.txt"; // 替换成实际文件路径
        ArrayList<USCrimeClass> storeList = new ArrayList<>();

        // 把所有需要自动关闭的资源都放进try-with-resources里
        try (FileInputStream fstream = new FileInputStream(inFile);
             DataInputStream in = new DataInputStream(fstream);
             BufferedReader br = new BufferedReader(new InputStreamReader(in))) {

            String strLine;
            // 跳过首行(表头)
            strLine = br.readLine();
            // 逐行读取剩余内容
            while ((strLine = br.readLine()) != null) {
                // 把每行字符串转换成USCrimeClass对象并加入集合
                storeList.add(storeToCrimeObjin(strLine));
            }

        } catch (IOException e) {
            // 处理文件读取异常,比如文件不存在、读取出错等
            e.printStackTrace();
        }

        // 这里可以验证读取结果,比如打印集合大小
        System.out.println("共读取了" + storeList.size() + "条犯罪数据");
    }

    // 假设你的storeToCrimeObjin方法是这样实现的(需要确保它能正确解析每行数据)
    private static USCrimeClass storeToCrimeObjin(String line) {
        // 这里写你的解析逻辑:分割字符串、赋值给USCrimeClass的字段
        USCrimeClass crime = new USCrimeClass();
        // 示例:String[] parts = line.split(","); 然后给crime的属性赋值
        return crime;
    }
}

关键改进点说明

  • try-with-resources自动关闭资源:把FileInputStream、DataInputStream、BufferedReader都放进try的括号里,Java会自动帮你关闭这些资源,不用手动写close(),避免资源泄漏。
  • 明确泛型类型:storeList声明为ArrayList<USCrimeClass>,这样编译器会检查你加入的元素类型,避免运行时类型转换错误。
  • 异常处理:添加了catch (IOException e)来捕获文件读取过程中可能出现的异常(比如文件找不到、权限问题等),让程序更健壮。
  • 代码闭合:补全了原来缺失的},确保代码结构完整。

最后要注意的点

确保你的storeToCrimeObjin方法能正确解析每行数据——比如如果是CSV格式,要处理分隔符、引号转义等情况,不然会导致USCrimeClass对象的属性值不正确哦。

内容的提问来源于stack exchange,提问作者Ramon Harper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:39:36