java - 如何在 Java 类中实现 Collection 字段的 getter/setter?

标签 java list design-patterns model javabeans

我正在创建一个包含列表的 JavaBean,并且可以想到两种可能性:

public class JavaBeanWithSettableList {
    private List<Integer> list;
    public List<Integer> getList {
        return list;
    }
    public void setList(final List<Integer> list) {
        this.list = list;
    }
}

...或者...

public class JavaBeanWithUnsettableList {
    private List<Integer> list = new ArrayList<Integer>();
    public List<Integer> getList {
        return this.list;
    }
    // No setter - need to use list.add(), list.remove() etc.
}

我在另一个项目中看到的第二个 - 它看起来更好,但我不确定这个设计来自哪里。有人能给我指点一篇命名该模式和/或描述其优点的文章吗?

最佳答案

此模式没有名称。第一个只是一个带有 List 的类,第二个是内部创建的列表。

通常,类中的状态越少、不变性越多越好。这样做的原因是,如果状态较少,则产生错误的可能性较小。

在您的情况下,例如,如果您使用第一种方法,那么您无法确保其他人没有为您的模型设置另一个列表。在第二种情况下,您无法确保有人不会调用您列表中的 clear()

最终,这一切都取决于您的用例。如果您希望您的类保存一个列表,但您不希望将来发生任何更改,您应该使用不可变列表。否则,尽可能限制可变性。

关于java - 如何在 Java 类中实现 Collection 字段的 getter/setter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20073123/

相关文章:

java - 无法在 Eclipse 上安装 glassfish 支持

algorithm - 将数字列表排序为交替的低-高-低序列的最有效方法是什么?

c# - 非常奇怪的 C# 泛型问题

design-patterns - 如何在社交网络中实现事件流

c# - 如果一个类需要在方法中需要时创建另一个类的多个实例,则进行依赖注入(inject)

java - Spring-Security 3/Spring MVC 和可怕的@Secured/RequestMapping

java - 扭曲的 AbstractFactory

java - 控制 ManagedExecutorServices/Java EE 7 的线程数

c - "temp=*q"和 "temp->link=*q"之间的区别

java - 另一个 Java 事件问题