gpt4 book ai didi

java - 不可变类/对象,私有(private)构造函数,工厂方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:21:42 24 4
gpt4 key购买 nike

已经阅读了如何通过以下步骤使类不可变

  1. 不要提供“setter”方法——修改字段或字段引用的对象的方法。
  2. 将所有字段设为最终字段和私有(private)字段。
  3. 不允许子类覆盖方法。最简单的方法是将类声明为 final。一种更复杂的方法是将构造函数设为私有(private)并在工厂方法中构造实例。
  4. 如果实例字段包含对可变对象的引用,则不允许更改这些对象:
    一种。不要提供修改可变对象的方法。
    b.不要共享对可变对象的引用。永远不要存储对传递给构造函数的外部可变对象的引用;如有必要,创建副本并存储对副本的引用。同样,必要时创建内部可变对象的副本,以避免在方法中返回原始对象。

我不确定我是否清楚地理解私有(private)构造函数和工厂方法在不变性上下文中的效用。如果我将类设置为最终类,基本上会关闭扩展它的任何其他类的所有路径。怎么说是一种更复杂的方法

我在单例模式中看到了私有(private)构造函数和工厂方法,这很有意义。但是当我们谈论对象不可变性时,当我们提到私有(private)构造函数和静态工厂方法时,我们是否也在限制对象构造/实例化??

最佳答案

首先,不可变类一般不应该被覆盖有几个原因,你可以找到它们here .

也就是说,将构造函数设为私有(private)只是防止类被覆盖的一种方法。为什么?因为在子类中,每个构造函数(隐式)调用基类的默认构造函数super()。但是如果你把这个构造函数设为私有(private),子类就不能调用它,因此就不能覆盖基类。当您想要控制特定类的实例总数时,例如在单例的情况下,这种方法非常适合。

关于java - 不可变类/对象,私有(private)构造函数,工厂方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13649584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com