Java 类内的列表处理

Java 类内的列表处理,java,Java,假设我有一个a类,它有一个相关元素列表(不相关的元素类型): 如果有人能指出这些方法的任何优点,我们将不胜感激。 谢谢。我不会授予访问列表的权限(即getList()),但是您添加了一个addElement方法,这很好。这是一个好主意,因为您可以对在该方法中添加到列表中的东西进行限制。编码时,您应该考虑维护过程。班级间相互了解越少越好。 客户机应该只知道A可以有元素。。。。所以我认为第二个设计要好得多。一般来说,你的 GETList](方法)被认为是坏的风格。如果类A返回对其实际列表的引用,调

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

如果有人能指出这些方法的任何优点,我们将不胜感激。
谢谢。

我不会授予访问列表的权限(即getList()),但是您添加了一个addElement方法,这很好。这是一个好主意,因为您可以对在该方法中添加到列表中的东西进行限制。

编码时,您应该考虑维护过程。班级间相互了解越少越好。


客户机应该只知道A可以有元素。。。。所以我认为第二个设计要好得多。

一般来说,你的<代码> GETList](方法)被认为是坏的风格。如果类

A
返回对其实际
列表的引用,调用方可能会调用该列表上的
clear()
,或者向其中添加一百万个元素,谁知道这都是什么呢。最好只返回
迭代器
,或者使用
集合只返回
列表
的只读视图。不可修改列表()

这意味着您的解决方案2,
addElement()
更好;
addElement()
方法可能包含用于验证添加元素、限制列表大小或其他内容的代码。而
clear()
将无法访问。

我会选择

public void method2() {
    a.addElement("");  
} 
因为mantains将列表隐藏在
A
中。当然,这取决于列表与
A
的关联程度。如果只有
A
的实例应该引用列表,那么这就是我的选择
另一个原因可能是放弃清单可能导致客户删除项目,您可能希望避免客户将列表视为他们自己的,这是代码< A<代码>,确保安全。P


否则列表不属于
A
,应该从中删除。

如果您的目的是真正公开列表,那么
方法2
通常是一种更好的OOP样式。(因为使用
method2
您将免费获得
addAll
等。)

标准API中此模式的示例:

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


缺点是,通过公开列表,您允许客户端执行
删除
等操作,因此如果您的目的只是通过
添加
收集项目,那么
方法1
可能仍然是更好的选择

标准API中此模式的示例:


您应该非常明确地将底层列表隐藏在类A中。如果可能,A不应该提供
getList()
方法

B类应专门使用
a.addElement()
。如果B需要从A中的列表中读取,A应该提供访问列表的方法,而不是给B整个列表

OO编程的主要租户之一是。这意味着您应该隐藏类的底层实现,并抽象出底层信息


对于您的特定问题,您需要使用
method2()
。您甚至不能使用
a.getList()如果您遵循适当的OO原则,则从类
B

您应该提供在类a上添加元素的方法。从设计的角度来看,返回原始
列表是错误的,因为您的类的用户可以完全访问它。

方法2更好,因为客户端不需要为列出执行情况。如果class A更改其数据结构,则客户端不会受到影响。

是的,这主要是我所想的。虽然从我的角度来看这是一个好主意,但在列表上使用只读视图。
public class Client {
  private A a = new A();

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

  public void method2() {
    a.addElement("");
  }    
}
public void method2() {
    a.addElement("");  
}