当 ArrayList 和构造函数/获取器存储 2 个其他类时,如何从一个类添加到 ArrayList

Posted

技术标签:

【中文标题】当 ArrayList 和构造函数/获取器存储 2 个其他类时,如何从一个类添加到 ArrayList【英文标题】:How do I add to an ArrayList from one class, when the ArrayList and constructors/getters are stored 2 other classes 【发布时间】:2021-12-02 22:52:10 【问题描述】:

我有 3 个课程,SessionEmployeeEmployeesEmployee 类具有构造函数和 getter,Employees 类具有 ArrayList,我正在尝试将 ArrayList 添加到 Session 类中。

public class Employee 
    public Employee(String name, String email)
        this.name = name;
        this.email = email;
    

    public String getName()
        return name;
    

    public String getEmail()
        return email;
    

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);
    

public class Session 
    private void addEmployee()
        System.out.print("Name: ");
        String addEmpName = In.nextLine();

        System.out.print("Email: ");
        String addEmpEmail = In.nextLine();

        Employees v1 = new Employees();
        v1.addEmpNew(new Employee(addEmpName, addEmpEmail));
    

但是当我运行它并放入新员工并使用显示所有员工的viewEmployees() 方法时,它不显示我添加的新员工,只显示我预先写好的约翰史密斯。我怀疑addEmpNew 方法可能有问题,但我不确定。

【问题讨论】:

“当我运行它时”,你究竟是怎么做到的? 您能否发布您的viewEmployees 实现并告诉我们您如何称呼它? 也许为了让你更接近问题,你也可以尝试打印addEmpNameaddEmpEmail的内容,这样你就知道用户输入实际上是你的变量的方式:)除此之外,在不知道你如何执行它以及 viewEmployees 的实现是什么的情况下,我们很难发现问题。此外,您可能希望自己熟悉调试代码的概念。 【参考方案1】:

您正在addEmployee 方法中创建一个Employees 实例(称为v1)。 addEmployee 方法完成后,方法内的所有变量都消失了(准备好被垃圾回收)。

如果您希望只有一个员工实例,请考虑将其设为全局变量。

public class Session 
    private final Employees v1 = new Employees();

    private void addEmployee()
        System.out.print("Name: ");
        String addEmpName = In.nextLine();

        System.out.print("Email: ");
        String addEmpEmail = In.nextLine();

        v1.addEmpNew(new Employee(addEmpName, addEmpEmail));
    

    private void printEmployees()
        // you will have to implement the toString method in Employees class
        System.out.print("Employees: " + v1.toString());
    

【讨论】:

以上是关于当 ArrayList 和构造函数/获取器存储 2 个其他类时,如何从一个类添加到 ArrayList的主要内容,如果未能解决你的问题,请参考以下文章

将 Long(来自构造函数)转换为 String 后过滤 ArrayList

ArrayList

ArrayList

ArrayList扩容机制

ArrayList扩容

构造函数重载类获取链接器错误使用DLL?