ArrayList getter和setter在类java中

时间:2015-03-02 23:09:30

标签: java class arraylist

public class Employee                                               
{
private String name;
private String department;


private ArrayList<Employee>job= new ArrayList();

//只想为此ArrayList添加getter和setter

public void setJob(Employee j)
{
job.add(j);

//这是我的二传手

我希望以后可以添加尽可能多的工作&#39;正如我想要的那样,通过扩展arraylist

2 个答案:

答案 0 :(得分:3)

虽然可以拥有List类型的setter和getter,但您应该仔细考虑它们的实现,因为大多数列表都是可变的。 例如,假设您要验证jobs列表不为空。

public void setJob(List<Employee> jobs) {
  if (jobs.isEmpty()) throw new RuntimeException();
  this.job = jobs;
}

现在,以下代码生成一个没有工作的员工:

Employee e = ...;
e.setJobs(jobs);
jobs.clear();
//the employee now has no jobs :-(

您可以通过defensive copy

来避免此问题
public void setJob(List<Employee> j) {
  this.job = new ArrayList<>(j);
}

这同样适用于吸气剂。如果您将其实现为:

public List<Employee> getJobs() {
   return this.jobs;
}

您允许调用者修改私有作业列表而不调用相应的setter:myEmployee.getJobs().clear()

在这种情况下,您可以返回一个不可修改的列表,而不是返回内部对象。

public List<Employee> getJobs() {
   return java.util.Collections.unmodifiableList(this.jobs);
}    

答案 1 :(得分:2)

通常对于集合或数组,您可以使用addJob,removeJob和getJobs而不是get / set对。