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

Java修改List<Media>中元素available属性报错及属性不更新问题

问题原因及修复方案

你遇到的所有报错和不符合预期的情况由4处错误共同导致:

  • 对List的set方法理解错误:List<Media>的set方法签名为set(int index, Media element),要求第二个参数必须是Media类型对象,你传入boolean值必然触发类型不匹配错误,该场景不需要调用set方法,直接修改遍历得到的Media对象属性即可。
  • 错误使用固定索引操作列表:你当前从文件加载的列表总长度只有2,合法索引仅为0、1,硬编码list.get(5)必然触发索引越界。且你在遍历中已经拿到了匹配ID的Media对象,完全不需要通过索引获取对象。
  • 属性修改逻辑顺序错误:你先调用toString()打印了对象当前状态,再修改available属性,输出的自然还是修改前的true。
  • setAvailable方法逻辑错误:你写的setAvailable方法忽略了传入参数,硬编码赋值为false,不符合setter方法的通用设计。

第一步:修正Media类的setter、getter方法

// 替换你原来的setAvailable方法
public void setAvailable(boolean available) {
    this.available = available;
}
// 确保你已经实现了对应的getter方法
public boolean isAvailable() {
    return this.available;
}

第二步:修正rentMedia方法逻辑

public void rentMedia(int id) {
    for(Media mediaById : list ) {
        if(mediaById.getId() == id) {
            if(mediaById.isAvailable()) {
                // 先修改属性,再打印输出
                mediaById.setAvailable(false);
                System.out.println("media successfully rented out ");
                System.out.print(mediaById.toString());
            } else { 
                System.out.println("Media with id="+id+" is not available for rent ");
            }
            // 匹配到对应ID的对象后直接终止遍历,节省性能
            break;
        }
    }
}

修改完成后即可实现租赁后available字段自动变为false的需求,同时不会再触发索引越界、类型不匹配等错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 05:48:03