如何从ArrayList中的Boxcar对象访问并修改属性c?
解决修改ArrayList中Boxcar对象属性的问题
嘿,别担心,这是Java新手很容易碰到的小问题,我来一步步帮你搞定~
首先咱们先说说你当前代码为啥不行:
- 编译报错是因为
Boxcar的构造函数需要三个参数(String、int、boolean),你只传了一个,肯定通不过; - 就算补上参数,这么做也根本不会修改原列表里的对象——因为for-each里的
b只是原列表中对象的引用副本,你给b赋值新的Boxcar对象,只是改变了这个副本的指向,原train列表里的旧对象完全没被改动。
那正确的做法是什么呢?核心是直接修改原对象的属性,而不是创建新对象:
步骤1:给Boxcar类添加修改属性的setter方法
面向对象编程里,类的属性一般会设为私有(private),所以需要提供一个公共方法来修改它。你需要在Boxcar类里加这样一个方法:
// 假设你的属性名是c,如果实际是cargo之类的,记得改成对应名字 public void setC(String newC) { this.c = newC; }
如果你的c属性是public的(虽然不推荐这么做,但新手可能会这么写),这一步可以跳过,但还是建议用setter方法,更符合封装的编程原则。
步骤2:在循环里调用setter方法修改原对象
现在你只需要遍历train里的每个Boxcar,调用刚才写的setter方法就行,不用创建新对象:
public void setCargo(String replace) { for(Boxcar b : train) { b.setC(replace); // 调用setter修改原对象的c属性 } }
这样循环里的b指向的是train列表里的原对象,调用它的方法会直接修改原对象的属性,完全符合你的需求~
内容的提问来源于stack exchange,提问作者zantezuke
相关产品推荐
相关产品推荐

