Java 为每个实例化的对象创建新的ArrayList

Java 为每个实例化的对象创建新的ArrayList,java,arraylist,Java,Arraylist,我有一个类,Employee,如下所示: import java.util.ArrayList; public class Employee extends Person { int salary; ArrayList<Sales> sales = new ArrayList<>(); public Employee(String name, int phoneNumber, String address,

我有一个类,
Employee
,如下所示:

import java.util.ArrayList;

public class Employee extends Person 
{
    int salary;
    ArrayList<Sales> sales = new ArrayList<>();

    public Employee(String name, int phoneNumber, String address, 
                    int salary, ArrayList<Sales> sales)
    {
        super(name, phoneNumber, address);
        this.salary = salary;
        this.sales = sales; 
    }
}
import java.util.ArrayList;
公共类雇员扩展个人
{
国际工资;
ArrayList sales=新建ArrayList();
公共雇员(字符串名称、整数电话号码、字符串地址、,
内部薪资,ArrayList销售)
{
超级(姓名、电话号码、地址);
这个。薪水=薪水;
这个。销售=销售;
}
}
现在,对于每个
员工
,我还必须存储每个
员工
的销售列表。我的方法是创建一个
Sales
类并添加
ArrayList Sales=new ArrayList()
员工
构造函数。我是朝着正确的方向前进,还是完全偏离了方向


谢谢你的帮助

首先,您应该为您的领域使用
列表
界面来促进松耦合!其次,
List
包含用于复制列表元素的
addAll
方法:

// ...
private int salary;
private List<Sales> sales = new ArrayList<>();

public Employee(String name, int phoneNumber, String address, int salary, List<Sales> sales) {
    super(name, phoneNumber, address);
    this.salary = salary;
    this.sales.addAll(sales);
}
/。。。
私人薪酬;
私有列表销售额=新的ArrayList();
公共员工(字符串名称、整数电话号码、字符串地址、整数工资、列表销售){
超级(姓名、电话号码、地址);
这个。薪水=薪水;
this.sales.addAll(sales);
}

您似乎在做两件事:将ArrayList传递给员工构造函数,将其直接分配给销售人员,并创建一个新的ArrayList-这绝对是多余的。您的代码有问题吗?+1用于防御性编程,-1用于使用列表,如果您有一个getList方法,它应该返回接口列表,但是您应该尽可能利用您的实现。好的,那么我将用
Collection
替换它,而不是
List
,以使其更通用。如果您需要访问任何代码(>代码> ARARELIST/<代码>或<代码> HASSET < /C> >或稍后执行的任何内容,则可以更改内部字段类型。我建议不要这样做,在大多数情况下,列表是更好的方式,因为集合也是一个集合,但要知道您是否得到唯一的“列表”是不是要考虑的问题。这就是为什么我会说:上下文相关,但在大多数情况下,使用List或SetIt实际上取决于集合的使用。例如,当我创建一个可以添加和删除
EventListener
s的类时,我倾向于使用
Set
而不是
List
(以及
CopyOnWriteArraySet
)由于通常的约定,当触发事件时,侦听器将以未定义的顺序收到通知。只要您的EventListener覆盖hashCode()和equals(),您就可以了。