Java中从Session类向Employees类的ArrayList添加元素不生效如何解决
问题原因及修复方案
核心问题定位
你的addEmpNew方法本身逻辑没有错误,问题出在实例的作用域和复用逻辑上:
- 你在
Session类的addEmployee()方法中,每次调用都会创建一个全新的局部Employees实例v1,这个实例的生命周期只存在于当前方法内部,方法执行结束后就会被JVM回收,你输入的新员工信息只存在于这个马上被销毁的临时实例里。 - 你后续调用
viewEmployees()方法查看数据时,用的是另一个独立的Employees实例,这个实例从未执行过添加新员工的操作,自然只会显示构造方法中预置的John Smith的信息。
修复方案
把Employees实例改为Session类的全局成员变量,全程复用同一个实例存储数据即可:
1. 调整Employees类,新增列表读取方法
方便后续查询所有员工数据:
import java.util.ArrayList; public class Employees { private ArrayList<Employee> employees = new ArrayList<Employee>(); public Employees(){ employees.add(new Employee("John Smith", "johnsmith@email.com")); } public void addEmpNew (Employee empNew){ employees.add(empNew); } // 新增get方法,返回员工列表 public ArrayList<Employee> getEmployees() { return employees; } }
2. 调整Session类,复用同一个Employees实例
不要每次添加员工都新建实例:
public class Session { // 将Employees实例作为类成员变量,全局复用 private final Employees employees = new Employees(); private void addEmployee(){ System.out.print("Name: "); String addEmpName = In.nextLine(); System.out.print("Email: "); String addEmpEmail = In.nextLine(); // 直接用已有的实例添加新员工 employees.addEmpNew(new Employee(addEmpName, addEmpEmail)); } // 查看员工的方法示例,用同一个实例读取数据 private void viewEmployees(){ for(Employee emp : employees.getEmployees()){ System.out.println("姓名:" + emp.getName() + ",邮箱:" + emp.getEmail()); } } }
修改后所有添加和查询操作都基于同一个Employees实例,新添加的员工就可以正常查询到了。
内容的提问来源于stack exchange,提问作者Drems
相关产品推荐
相关产品推荐

