首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类中的ArrayList getter和setter

类中的ArrayList getter和setter
EN

Stack Overflow用户
提问于 2015-03-03 07:09:30
回答 2查看 4.7K关注 0票数 0
代码语言:javascript
复制
public class Employee                                               
{
private String name;
private String department;


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

//只想为这个ArrayList添加getter和setter

代码语言:javascript
复制
public void setJob(Employee j)
{
job.add(j);

//这是我的setter

我希望以后能够通过扩展arraylist来添加我想要的任意多个'job‘

EN

Stack Overflow用户

发布于 2015-03-03 07:28:32

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

代码语言:javascript
复制
public void setJob(List<Employee> jobs) {
  if (jobs.isEmpty()) throw new RuntimeException();
  this.job = jobs;
}

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

代码语言:javascript
复制
Employee e = ...;
e.setJobs(jobs);
jobs.clear();
//the employee now has no jobs :-(

您可以通过创建defensive copy来避免此问题

代码语言:javascript
复制
public void setJob(List<Employee> j) {
  this.job = new ArrayList<>(j);
}

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

代码语言:javascript
复制
public List<Employee> getJobs() {
   return this.jobs;
}

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

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

代码语言:javascript
复制
public List<Employee> getJobs() {
   return java.util.Collections.unmodifiableList(this.jobs);
}    
票数 3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28821142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档