当前位置: 首页 > 知识库问答 >
问题:

不可变类/对象、私有构造函数、工厂方法

锺威
2023-03-14

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

    null

我不确定我是否清楚地理解了私有构造函数和工厂方法在不变性上下文中的效用。如果我使class final,基本上就是关闭扩展它的任何其他类的所有路径。这是一种更复杂的方法吗

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

共有1个答案

商飞尘
2023-03-14

首先,不变类通常不应该被重写有几个原因,您可以在这里找到它们。

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

 类似资料:
  • 我有一个java类,它只有静态方法和字段,所以我不想为此创建任何对象。我可以从两个方面来理解, 创建类摘要 使用私有构造函数。 这两种方法哪一种更好?

  • 问题内容: 在Java中,在抽象类中使用私有构造函数的目的是什么? 在一个评论中,我得到了这个问题,我很好奇,在什么情况下我们需要以这种方式使用构造函数? 我认为它可以与抽象类中的另一个构造函数一起使用,但这非常简单。它也可以用于构造将超过抽象类的静态内部类。 也许还有更优雅的用法? 问题答案: 如果构造函数是类的 唯一 构造函数,则原因很明确:防止子类化。一些类仅充当静态字段/方法的持有者,而不

  • 问题内容: 我正在学习“ 有效的Java” ,书中并未建议我认为一些标准的东西,例如对象的创建,我的印象是构造函数是最好的方法,书中说我们应该利用在静态工厂方法中,我不能说出一些优点,而在缺点中却有缺点,所以我在问这个问题,这是使用它的好处。 优点: 静态工厂方法的一个优点是,与构造函数不同,它们具有名称。 静态工厂方法的第二个优点是,与构造函数不同,不需要每次调用它们时都创建一个新对象。 静态工

  • 问题内容: 有人可以澄清Javascript中的构造函数和工厂函数之间的区别。 何时使用一个代替另一个? 问题答案: 基本区别在于,构造函数与关键字一起使用(这会使JavaScript自动创建一个新对象,在该函数内将该对象设置为该对象,然后返回该对象): 工厂函数的调用类似于“常规”函数: 但是要使其成为“工厂”,就需要返回某个对象的新实例:如果它仅返回布尔值或其他内容,则不会将其称为“工厂”函数

  • 问题内容: 我们有一个Hibernate / Spring应用程序,它具有以下Spring Bean: 将应用程序连接在一起时,在hibernate实体中使用私有构造函数时,会出现以下错误: 实体是典型的域对象,例如Employee等。 当将构造函数的可见性修改器更改为打包(或公共)时,应用程序运行良好,并且实体存储/加载到数据库中。我们/如何在Spring / Hibernate事务管理中使用私

  • 我试图理解为什么在谈到构造函数时,类成员的可访问性之间存在差异。 考虑下面的例子: 的私有成员作为私有成员,不应从访问。对于字段和方法,情况确实如此,但构造函数似乎没有遵循相同的规则。 从JLS-8(6.6.1.确定可访问性)中,我们可以阅读: [...] 引用类型的成员(类、接口、字段或方法)或类类型的构造函数只有在类型可访问且声明该成员或构造函数允许访问时才可访问: > [……] 否则,成员或