我有一个包含这样一个列表对象的类:
import java.util.ArrayList;
import java.util.List;
public class MyClass
{
private List<String> myList;
//???
}
现在,为了让其他类访问列表,我必须添加以下内容之一:
一个吸气剂和一个二传手
或一个getter和一个setter,并使用一个空的ArrayList初始化构造函数中的列表
或一个getter和一个setter,并在构造函数中初始化列表,并在构造函数参数上传递一个列表
或具有两个构造函数的getter和setter
或只有一个getter并使用空ArrayList初始化构造函数中的列表
或只有一个getter并在构造函数中初始化列表,并在构造函数参数上传递一个列表
或只有两个构造函数的getter
最好的事情是什么?有会议吗?
编辑:通过&#34;让其他类访问列表&#34;我的意思是没有具体的,只是一般用法,让其他类使用列表,存储和读取对象。
答案 0 :(得分:1)
数据隐藏和封装始终是一个很好的原则
如果没有特定的架构,这很难决定,许多工具可以与很多人一起生存,如果没有这个......您可以对使用我们班级的开发人员保持温和,并允许他们使用setter并为您的列表提供那些不可修改的集合。
它将取决于软件开发人员在创建MyClass实例后需要处理列表的程度。
答案 1 :(得分:1)
没有一种方法或惯例允许类中的List字段被提供&#34;提供&#34;到另一个班级。
通过&#34;让其他类访问列表&#34;我的意思是什么, 只是一般用法,让其他类使用列表,存储 并读取其中的对象。
您有两种方法可以将类别中的List字段信息提供给另一个类:
以受保护的方式。这两个类并非设计为非常耦合,而且您希望保护List中添加的数据不受包含List的类的影响。
因此,您不能为List提供getter和setter,而是可以提供公共方法来读取和添加List中的数据。
通过这种方式,客户端类不会与使用的类的实现保持耦合:它不知道使用List和单个负责List(添加/获取/移动,......操作和规则应用)对他们而言)是它的主人
访问List的另一种方法是为列表提供getter,但是将其提供为不可修改的:
public List<YourClass> getReadonlyList(){
return Collections.unmodifiableList(originalList);
}
以耦合的方式。这两个类的设计非常紧密。因此,为List提供getter和setter不是一个问题。它甚至可能非常合适,因为它避免引入无用的复杂性。