【问题标题】:Good style to call advanced constructor from unparametrized constructor?从未参数化的构造函数调用高级构造函数的好风格?
【发布时间】:2011-12-19 08:40:48
【问题描述】:

我刚刚与一些同事讨论了 Java 构造函数、设计模式以及使用未参数化构造函数初始化对象的好方法(如果我通常等待一些参数)。

其中一位年长的人想出了他的实现方式,总是这样:

public class Foo {

public Foo() {
this(0,0,0);
}

public Foo(int a, int b, int c) {
this.a = a;
this.b = b;
this.c = c;
}
..
}

我的问题是,这种风格是否很好,它的行为究竟是什么?

据我了解应该是:

  • 它首先实例化一个对象,然后调用参数化构造函数以使用该参数设置构造该类型的新对象,并将其自己的引用设置为新对象。所以 GC 必须删除第一个创建的。

【问题讨论】:

  • 实例化对象的不是构造函数,而是new关键字。构造函数只负责初始化对象。
  • 所以分配内存的总是new关键字,而构造函数只是对象的收费? (也适用于 c++?)

标签: java design-patterns coding-style


【解决方案1】:
So the GC has then to delete the first created one.

没有。链接构造函数时只会创建 1 个实例。

要回答你的问题,是的,这是很好的风格,假设你需要 foo()foo(int, int, int)

【讨论】:

    【解决方案2】:

    这被称为Telescoping Constructor pattern。在 Effective Java 中,Joshua 为 alternatives 提供了关于何时使用的建议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 2022-09-23
      • 2021-11-23
      相关资源
      最近更新 更多