
在 java 中向 linkedlist 添加多个对象时,若反复使用同一对象实例并修改其属性,列表中所有元素将指向该实例的最新状态,导致“数据被覆盖”现象;正确做法是每次添加前创建新对象实例。
在 java 中向 linkedlist 添加多个对象时,若反复使用同一对象实例并修改其属性,列表中所有元素将指向该实例的最新状态,导致“数据被覆盖”现象;正确做法是每次添加前创建新对象实例。
这是一个典型的对象引用误用问题:LinkedList
✅ 正确写法:每次添加前新建对象实例
应将 Jobs jobStore = new Jobs(); 移入 case "JOB": 分支内部,确保每条任务数据都由独立的对象承载:
case "JOB":
System.out.println("---> got a JOB instruction");
String jobTime = elements[1];
String jobNumber = elements[2];
if (Integer.parseInt(jobNumber) >= 11) {
System.out.println("-----> Maximum job numbers reached");
break;
}
System.out.println("-----> Job Time = " + jobTime + ", Job Number = " + jobNumber);
// ✅ 关键修复:每次接收新任务时创建全新 Jobs 实例
Jobs jobStore = new Jobs();
jobStore.setJobNumber(jobNumber);
jobStore.setJobTime(jobTime);
jobManager.addJob(jobStore); // 现在添加的是不同对象的引用
break;同时,请移除类成员变量中的重复声明:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
// ❌ 删除这一行(避免误导和潜在并发问题) // Jobs jobStore = new Jobs();
⚠️ 注意事项与最佳实践
- 不要复用可变对象:尤其在集合操作、多线程或循环场景中,避免将外部可变对象直接加入集合。
-
考虑使用构造函数初始化:可为 Jobs 添加带参构造器,提升代码简洁性与安全性:
public Jobs(String number, String time) { this.jobNumber = number; this.jobTime = time; } // 调用方式变为:new Jobs(jobNumber, jobTime) - 线程安全提示:当前 JobsManager 的 addJob() 和 showAll() 方法未加同步,在多线程环境下(如 ServerSystem extends Thread)可能引发竞态条件。如需并发安全,可改用 CopyOnWriteArrayList 或对方法加 synchronized,或使用 Collections.synchronizedList(new LinkedList()) 包装。
- 空值与异常防护:示例中 elements[1]/[2] 未做边界检查,实际生产环境建议增加 elements.length >= 3 判断,并对 Integer.parseInt() 做 NumberFormatException 捕获。
通过上述修正,jobsList 将真正保存多个独立的 Jobs 对象,showAll() 输出即可准确反映每一条历史任务数据。
立即学习“Java免费学习笔记(深入)”;

















