从另一个构建函数调用是否有任何优缺点?

时间:2015-07-15 06:42:13

标签: java constructor

考虑以下从另一个构建函数调用的情况:

public Pet(int x) {
    this.x = x; // “this” means this object
}
public Pet (int x, String y) {
    this(x);    // calls constructor public Pet(int id)
    this.y = y; // ”this” means this object
}
.
.
.
public Pet (params,[...]) { // [...] shows the number of params
    this(params,[...])
    //...
}

并单独重载构造函数体。

public Pet(int x, int y, int z, int a, int b, [...]) {
    this.x = x;
    this.y = y;
    this.z = z;
    this.a = a;
    this.b = b;
    //[...] and so on 
}

这是一个明显的目标,可以用更少的代码行来实现。 (根据上述情况我的问题)

从另一个构建函数中调用一个构造函数是好/坏的做法吗?我们开发企业应用程序时的优缺点是什么;如果我们考虑性能,记忆等。

4 个答案:

答案 0 :(得分:1)

在考虑在某些情况下某些内容是否具有高效性和/或最佳时,您应始终关注Rules of Optimization

除此之外,还有一些明显的优点和缺点。

此方法的专家少重复代码。随着每个构造函数的添加,对super的调用会变得更长,但this.x = x无法在任何地方重复操作。

这种方法的结果是,公开了构建此对象的更多方法,当您可能正在寻找工厂或构建器时,这会降低多个构造函数方法的可见性。

答案 1 :(得分:0)

这比在多个构造函数中复制初始化代码要好得多。性能和内存不应受到影响。更干净的代码。

答案 2 :(得分:0)

它不是关于利弊和专业人士,而是关于你想要达到的目标。 一般来说,从另一个构建器调用一个构造函数并不是一个坏习惯,如果您正在减少预期(可能是重复的)代码,那么最好使用这种方法。

答案 3 :(得分:0)

根据我的经验,当您实例化类时,很多时候您将无法获得所有属性的值,或者可能没有。

我几乎总是创建一个完整的和一个空的构造函数,因为有时我需要实例化类而不将值赋给属性直到以后,所以我想它几乎取决于你的代码所做的。

另一个重要的事情是,在没有弄乱的情况下对代码有一定的灵活性是很好的,因为当你在一个有更多人的项目上工作时,有人需要使用的可能性很高或者之后更改代码,代码越灵活,其他人就可以更轻松地使用代码。