【问题标题】:Preventing object class creation防止对象类创建
【发布时间】:2014-11-23 15:57:16
【问题描述】:

我一直在阅读 the article 关于构造函数的内容,其中写的是:

公共类同样可以防止在外部创建实例 通过声明至少一个构造函数来防止创建它的包 具有公共访问权限的默认构造函数,并通过声明 no 构造函数是公共的。

我对声明没有公开的构造函数感到困惑。这是因为如果我们根本不声明任何构造函数,则隐式声明的默认构造函数将使用类的访问修饰符隐式声明。这意味着如果类声明为公共,则默认构造函数也将是公共的。那就是我们可以在包外使用它(在包外创建实例)。

【问题讨论】:

  • 句子“不声明任何公共构造函数”的意思是“不声明任何公共构造函数”。 JLS 中的措辞可以更清楚。

标签: java constructor


【解决方案1】:

你错过了这一点:

通过声明至少一个构造函数

这就是阻止创建默认构造函数的原因。

给出的示例有一个默认访问(包访问)构造函数:

PackageOnly() { }

... 所以它满足两个条件: a) 它声明了至少一个构造函数; b) 它没有声明公共构造函数。

【讨论】:

    【解决方案2】:

    不,该类可以是公共的,但构造函数可以是 protected 仅用于包访问,也可以是 private - 主要与工厂静态方法一起使用

    【讨论】:

      猜你喜欢
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-05
      • 2014-08-13
      • 1970-01-01
      • 2018-09-29
      • 1970-01-01
      • 2010-09-05
      相关资源
      最近更新 更多