Java读取txt添加到Events类ArrayList报错String无法转Events如何解决
问题原因
你遇到的类型不兼容报错根本原因是:ArrayList<Events>的泛型约束了列表只能存储Events类的实例,你从文件读取的data是String类型,二者是完全独立的类型,即使Events内部包含String类型的属性,也不能直接把String对象添加到Events类型的列表中。
修复方案
1. 核心报错修复
你需要先将读取到的文本按你的文件格式拆分,构造出Events对象后再添加到列表中,示例代码如下(请根据你实际input.txt的字段分隔符调整拆分规则):
while(inFile.hasNextLine()) { // 读取整行内容,避免next()只读单个分词的问题 String lineContent = inFile.nextLine(); // 按实际分隔符拆分字段,如逗号分隔就用split(","),制表符分隔就用split("\t") String[] fields = lineContent.trim().split(" "); // 简单校验字段数量避免数组越界 if (fields.length >= 2) { Events event = new Events(fields[0], fields[1]); events.add(event); } }
2. 其他潜在问题修复
- 自定义
SortedArrayList的泛型定义存在原始类型警告,需要修改泛型约束保证类型安全:
// 修改前:public class SortedArrayList<E extends Comparable> extends ArrayList<E> public class SortedArrayList<E extends Comparable<E>> extends ArrayList<E>
Events类的compareTo实现逻辑错误,两个字符串比较结果直接相加会导致排序规则异常,应优先比较第一个字段,相等再比较第二个字段:
@Override public int compareTo (Events e){ int ticketRes = ticketsbought.compareTo(e.getTicketsbought()); return ticketRes != 0 ? ticketRes : eventname.compareTo(e.getEventname()); }
- 如果你需要用到自定义的自动排序能力,不要用原生
ArrayList,替换成你写的SortedArrayList,添加元素时调用insert方法才会触发排序逻辑:
// 替换原来的ArrayList声明 SortedArrayList<Events> events = new SortedArrayList<>(); // 添加时调用insert而非add events.insert(new Events(fields[0], fields[1]));
- 所有
Scanner实例使用完成后需要调用close()方法释放资源,避免资源泄漏。
内容的提问来源于stack exchange,提问作者user17441632
相关产品推荐
相关产品推荐

