【问题标题】:ArrayList getter and setter in a class javajava类中的ArrayList getter和setter
【发布时间】:2015-03-02 23:09:29
【问题描述】:
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);

// 这是我的二传手

我希望以后能够通过扩展数组列表添加任意数量的“工作”

【问题讨论】:

  • 那么你的问题是什么?
  • 只是想知道如何在我的课堂上设置setter和getter,谢谢
  • 您可以通过简单地一遍又一遍地调用setJob 方法来添加任意数量的内容,但是getter 应该返回什么?第一个员工?最后一个员工?一个Iterable 的员工?

标签: java class arraylist


【解决方案1】:

虽然您可以拥有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;
}

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

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

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

【讨论】:

  • 非常感谢您的帮助,
【解决方案2】:

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

【讨论】:

  • 这是否意味着我不能使用 setter 和 getter ?
  • 这是测试练习的一部分,所以我需要使用 setter 和 getter,谢谢
  • 你可以为所欲为,没有规则,只有指南。
猜你喜欢
  • 2012-06-09
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
相关资源
最近更新 更多