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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:06:09