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

ArrayList的get方法返回Object而非AccessCode类,调用getUsed()报错

问题原因

你遇到的编译错误核心原因是**saveCodes方法的参数使用了不带泛型的原始ArrayList类型**。在Java中,原始集合类型的元素会被当作Object处理,所以codeList.get(i)返回的是Object对象,而Object类并没有定义getUsed()方法,编译器自然找不到这个符号。虽然打印元素时显示的是AccessCode对象,这是因为打印时默认调用了对象的toString()方法,但编译期的类型检查只认声明的Object类型。

解决方案

方案1:给方法参数添加泛型约束(推荐)

将saveCodes方法的参数从ArrayList codeList改为ArrayList<AccessCode> codeList,这样集合的元素类型被明确指定为AccessCode,get(i)会直接返回AccessCode对象,无需额外转换即可调用getUsed()方法。

修改后的Robot类相关代码:

import java.util.ArrayList;
import java.util.HashMap;

class Robot {

    ArrayList<AccessCode> usedAccessCodes = new ArrayList<>();
    ArrayList<AccessCode> unusedAccessCodes = new ArrayList<>();
    // 同时建议给HashMap也加上泛型约束,避免后续问题
    HashMap<String, ArrayList<AccessCode>> codeHashMap = new HashMap<>();
    
    public void saveCodes(ArrayList<AccessCode> codeList){
        AccessCode temp;
        for (int i = 0; i < codeList.size(); i ++){
            System.out.println(codeList.get(i)+"\n");
            
            if (codeList.get(i).getUsed()) {
                usedAccessCodes.add(codeList.get(i));
            } else{
                unusedAccessCodes.add(codeList.get(i));
            }
            
        }
    }
     public void buildHashMap(){
         codeHashMap.put("used", usedAccessCodes);
         codeHashMap.put("unused", unusedAccessCodes);
     }
}

方案2:强制类型转换(不推荐)

如果必须使用原始集合类型,可以在调用方法前将codeList.get(i)强制转换为AccessCode类型,但这种方式存在类型转换失败的风险(比如集合中混入非AccessCode对象时会抛出ClassCastException),不建议使用:

if (((AccessCode)codeList.get(i)).getUsed()) {
    usedAccessCodes.add((AccessCode)codeList.get(i));
} else{
    unusedAccessCodes.add((AccessCode)codeList.get(i));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 12:27:33