例如:
public class Foo {
private int bar = 42;
Foo() {}
}
Run Code Online (Sandbox Code Playgroud)
VS
public class Foo {
private int bar;
Foo() {
bar = 42;
}
}
Run Code Online (Sandbox Code Playgroud)
这两种方法之间有任何成本/收益吗?我能看到它有所作为的唯一方法是在这样的场景中(你为第二个构造函数设置两次值):
public class Foo {
private int bar = 42;
Foo() {}
Foo(int in) {
bar = in;
}
}
Run Code Online (Sandbox Code Playgroud)
vs(无论哪种方式你只设置一次)
public class Foo {
private int bar;
Foo() {
this(42);
}
Foo(int in) {
bar = in;
}
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?这样或那样做有什么固有的价值吗?
好吧,我意识到这些功能是相同的,我想弄清楚的是,如果有任何重大的处理成本与另一个相关联.似乎它应该是可以忽略的,充其量,但我想确认我的怀疑.
我也意识到手动设置它们可以消除启动逻辑的可能性.这就是我选择这么简单的例子的原因.我编辑了问题文本,以反映我感兴趣的是效率.
cle*_*tus 11
这两种方法是等价的.话虽如此,我将添加两件事:
在(2)我认为这是一个更好的版本:
public class Foo {
private int bar;
Foo() {
this(42);
}
Foo(int in) {
bar = in;
}
}
Run Code Online (Sandbox Code Playgroud)
通过链接构造函数,您可以在一个很好的DRY(不要重复自己)中获得默认默认值,特别是在处理可能具有默认参数,各种允许类型的参数和非平凡初始化的多个参数时.理想情况下,只有一个或两个构造函数应该具有重要的逻辑.其余的应该链接到另一个构造函数.
如果你想使类不可变(正如Josh Bloch所说,赞成不变性)那么:
public class Foo {
private final int bar;
Foo() {
this(42);
}
Foo(int in) {
bar = in;
}
}
Run Code Online (Sandbox Code Playgroud)
最后,值得将42作为静态最终常量(私有或公共,视情况而定).
| 归档时间: |
|
| 查看次数: |
211 次 |
| 最近记录: |