考虑以下从另一个构建函数调用的情况:
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
}
这是一个明显的目标,可以用更少的代码行来实现。 (根据上述情况我的问题)
从另一个构建函数中调用一个构造函数是好/坏的做法吗?我们开发企业应用程序时的优缺点是什么;如果我们考虑性能,记忆等。
答案 0 :(得分:1)
在考虑在某些情况下某些内容是否具有高效性和/或最佳时,您应始终关注Rules of Optimization。
除此之外,还有一些明显的优点和缺点。此方法的专家少重复代码。随着每个构造函数的添加,对super
的调用会变得更长,但this.x = x
无法在任何地方重复操作。
这种方法的结果是,公开了构建此对象的更多方法,当您可能正在寻找工厂或构建器时,这会降低多个构造函数方法的可见性。
答案 1 :(得分:0)
这比在多个构造函数中复制初始化代码要好得多。性能和内存不应受到影响。更干净的代码。
答案 2 :(得分:0)
它不是关于利弊和专业人士,而是关于你想要达到的目标。 一般来说,从另一个构建器调用一个构造函数并不是一个坏习惯,如果您正在减少预期(可能是重复的)代码,那么最好使用这种方法。
答案 3 :(得分:0)
根据我的经验,当您实例化类时,很多时候您将无法获得所有属性的值,或者可能没有。
我几乎总是创建一个完整的和一个空的构造函数,因为有时我需要实例化类而不将值赋给属性直到以后,所以我想它几乎取决于你的代码所做的。
另一个重要的事情是,在没有弄乱的情况下对代码有一定的灵活性是很好的,因为当你在一个有更多人的项目上工作时,有人需要使用的可能性很高或者之后更改代码,代码越灵活,其他人就可以更轻松地使用代码。