我们应该总是在类中使用零参数构造函数吗?

时间:2010-08-16 14:07:56

标签: java constructor

每个Java类都应该有一个零参数构造函数吗?

4 个答案:

答案 0 :(得分:22)

如果在没有向构造函数提供任何信息的情况下创建类的实例没有意义,那么您不需要零参数构造函数。

一个很好的例子是java.awt.Color类,其所有的ctors都被论证了。

答案 1 :(得分:10)

不,始终创建零参数构造函数没有意义,以下场景是提供至少一个参数构造函数的示例

  1. 类本身无法创建的必需依赖项。
  2. 属性没有任何有意义的默认值。
  3. 您希望拥有/需要零参数构造函数的情况:

    1. 您希望遵守JavaBeans规范(对简单数据对象有意义)。
    2. 可以使用有意义的默认值初始化所有字段。
    3. 您想使用需要它的框架。
    4. 在我看来,有一个零参数构造函数的错误论点是一长串参数。为此,有一个更好的解决方案,而不是接受初始化创建后未处于安全状态的对象:

      1. 使用Builder模式。
      2. 提供专门的容器对象以通过构造函数配置实例。
      3. 提供多个构造函数,其中每个构造函数的基本参数都是不能分配默认值的必需参数。

答案 2 :(得分:4)

正如Andy Thomas-Cramer已经指出的那样,甚至是不可能的:

class NeedsToBeImmutable {
    // For a class to be immutable, its reachable state
    // MUST be reached through a final field
    private final String stuff;

    //!!Compile error!!
    public NeedsToBeImmutable(){}

    public NeedsToBeImmutable(String stuff){
    this.stuff = stuff;
    }
    //getters...
}

答案 3 :(得分:3)

没有。但也有例外。例如,如果您希望您的类只包含静态util方法或单例类或只包含常量的类,那么您应该创建一个没有参数的私有构造函数,以防止它被显式实例化。