关于私人arraylist和其他此类结构的最佳做法

4 java collections class-design arraylist

我有以下课程,我正在争取如何实施.问题在于是否有一个私人收藏项目,在这种情况下是一个arraylist,aa成员.我很清楚,对于任何类成员都有getter和setter被认为是最佳实践,但在这种情况下,使用getter和setter需要重新实现(或者更确切地说是重复)大量的ArrayList功能.

示例类:

public class Email
{
    private ArrayList<String> To;
    private ArrayList<String> Cc;
    private ArrayList<String> Bcc;

    ...
}
Run Code Online (Sandbox Code Playgroud)

我假设答案是我应该为这些数组实现getter和setter吗?在处理这种情况时,我有没有想过的方法?管理这些列表的简单方法是将私有修饰符设置为public并检查数组数据在调用方法时是否有效,但这是正确的吗?任何人都可以指出我的其他SO问题,设计模式等我应该考虑的方向吗?

Jus*_*ini 6

我很清楚,对于任何班级成员来说,拥有吸气剂和制定者是最佳做法.

我不同意.只暴露你需要的东西!尝试用ADT(抽象数据类型)来思考.换句话说,从内部创建一个抽象层ArrayLists.任何使用你班级的人都不应该知道你在内部使用ArrayLists.除非绝对必要,否则你不应该为你提供吸气剂ArrayLists.如果您觉得需要这些,请考虑返回List并使用Collections.unmodifiableList()以防止通过getter进行修改.


Joh*_*ter 5

实际上在那种情况下,我认为不提供直接的getter/setter组合会更好.

我宁愿通过以下方式接近它:

  1. 将类型更改为List<String>(在字段上使用接口的最佳做法.)
  2. ArrayList在构造函数中初始化一个空s.
  3. 为提供代表add,remove,hasTo/Cc/Bcc.

通过这种方式,您可以使用其他功能来装饰每个集合,例如确保String包含有效的收件人信息.

public void addTo(String recipient){
  // validate recipient
  this.to.add(recipient);
}

public String removeTo(String recipient){
  return this.to.remove(recipient);
}

public boolean hasTo(){
  return this.to.size() > 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑

我忘了提到一个吸气剂是有意义的,因为你在处理电子邮件时需要它.但是看看另一个考虑回归不可修改的答案List.