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

Java泛型实现ArrayList存储Date/boolean类型及类型转换报错解决

问题原因
  • 你定义的UserInfo<T>中的ArrayList<T>为单类型泛型集合,仅支持存储同一种类型的元素,你尝试同时存入Date、int、boolean三种不同类型的数据,本身不符合单泛型集合的设计规则
  • ArrayList的add()方法没有三个入参的重载,你一次性传入三个参数调用add属于语法错误
  • 你在使用UserInfo时未指定泛型的具体类型,默认原始类型下传入Date会触发类型不匹配的编译报错
  • Logger类中初始化的obj集合为空,直接调用get(0)会在运行时抛出索引越界异常
修正方案

推荐使用实体类封装日志字段的规范写法,避免泛型强转的风险:

// 日志数据实体类
import java.util.Date;
public class LogEntry {
    private Date operateDate;
    private int tryCount;
    private boolean pinCorrect;

    public LogEntry(Date operateDate, int tryCount, boolean pinCorrect) {
        this.operateDate = operateDate;
        this.tryCount = tryCount;
        this.pinCorrect = pinCorrect;
    }

    // 按需添加getter、setter方法即可
}
// 改造后的UserInfo类
import java.util.ArrayList;
import java.util.Date;
public class UserInfo {
    private ArrayList<LogEntry> logList;

    public UserInfo(){
        this.logList = new ArrayList<>();
    }

    public void addLog(Date date,int count, boolean correct) {
        logList.add(new LogEntry(date, count, correct));
    }
}
// 改造后的Logger类
import java.util.ArrayList;
import java.util.Date;
public class Logger {
    private ArrayList<UserInfo> userInfoList = new ArrayList<>();

    public Logger(Date date, int count, boolean correct){
        UserInfo userInfo = new UserInfo();
        userInfo.addLog(date, count, correct);
        userInfoList.add(userInfo);
    }
}

如果确实需要用同一个集合存储不同类型的原始值(不推荐,取值时需要手动强转容易出错),可以将集合泛型指定为Object:

import java.util.ArrayList;
import java.util.Date;
public class UserInfo {
    private ArrayList<Object> values;

    public UserInfo(){
        this.values = new ArrayList<>();
    }

    public void setValue(Date date,int count, boolean correct) {
        // 单次add只能存入一个元素,分三次调用
        values.add(date);
        values.add(count);
        values.add(correct);
    }
}

内容的提问来源于stack exchange,提问作者Matt Beagle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:27:03