![](/img/trans.png)
[英]Java Call a Constructor from Another Constructor Without Immediately Having the Parameters
[英]Java call constructor from constructor
我有一個構造函數
private Double mA;
private Double mB;
Foo(Double a) {
mA = a;
mB = a + 10;
}
Foo(Double a, Double b) {
mA = a;
mB = b;
// some logic here
}
如果我這樣調用第二個構造函數:
Foo(Double a) {
Double b = a + 10;
this(a, b);
}
比編譯器告訴我的那樣,那個構造函數應該是第一個語句。 那么我需要將所有邏輯從第二個構造函數復制到第一個構造函數嗎?
你為什么不這樣做this(a, a+10)
呢?
請注意, this()
或super()
必須是構造函數中的第一個語句(如果存在)。 但是,你仍然可以在參數中做邏輯。 如果需要執行復雜的邏輯,可以通過在參數中調用類方法來實現:
static double calculateArgument(double val) {
return val + 10; // or some really complex logic
}
Foo(double a) {
this(a, calculateArgument(a));
}
Foo(double a, double b) {
mA = a;
mB = b;
}
如果在構造函數中使用this()
或super()
調用來調用其他構造函數,則它應始終是構造函數中的第一個語句。
這就是為什么你的下面的代碼不能編譯: -
Foo(Double a) {
Double b = a + 10;
this(a, b);
}
您可以修改它以遵循上述規則: -
Foo(Double a) {
this(a, a + 10); //This will work.
}
另一個構造函數的調用必須是構造函數中的第一行。
您可以調用顯式構造函數調用,如 -
Foo(Double a) {
this(a, a+10);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.