簡體   English   中英

來自構造函數的Java調用構造函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM