列出类中的处理

Dee*_*zee 3 java

假设我有一个A类,它有一个相关元素列表(元素类型不相关):

public class A {
  private List<String> list;

  public List<String> getList() {
    return list;
  }

  public void addElement(String element) {
    list.add(element);
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我希望从另一个类Client访问此列表.我需要添加一个新元素.从设计的角度来看,问题是一个更具哲学性的问题.

public class Client {
  private A a = new A();

  public void method1() {
    a.getList().add("");
  }

  public void method2() {
    a.addElement("");
  }    
}
Run Code Online (Sandbox Code Playgroud)

如果有人能指出任何这些方法的任何优势,将不胜感激.谢谢.

Ern*_*ill 9

通常你的getList()方法被认为是不好的风格.如果类A返回对其实际的引用List,则调用者可能会调用clear()该列表,或者向其添加一百万个元素,或者知道什么是全部.这是一个更好的主意,只有一个返回Iterator,或者只有一个只读视图List使用Collections.unmodifiableList().

这意味着你的解决方案2,addElement()更好; 该addElement()方法可能包含验证添加元素,限制列表大小等的代码.并且clear()无法访问.


aio*_*obe 5

如果你的意图是真正公开列表,method2通常是更好的OOP风格.(因为通过使用method2你将获得addAll免费等.)

标准API中此模式的示例:

文档应该注意说像对象由返回的集合支持,因此修改将...


缺点是通过公开允许客户做的列表remove等等,所以如果您打算收集项目,add那么method1可能仍然是更好的选择.

标准API中此模式的示例: