代码报冗余类型参数错误,如何修正并读取数据至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
相关产品推荐
相关产品推荐

