我应该为Java中的列表对象提供setter吗?

时间:2017-04-21 09:09:48

标签: java oop object constructor

我有一个包含这样一个列表对象的类:

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;我的意思是没有具体的,只是一般用法,让其他类使用列表,存储和读取对象。

2 个答案:

答案 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不是一个问题。它甚至可能非常合适,因为它避免引入无用的复杂性。