Java从构造函数调用构造函数

标签 java 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;
}

关于Java从构造函数调用构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12880443/

相关文章:

javascript - 资源中缺少 JavaScript 文件

java - Handler().postDelayed() 在方向改变时发送多个 Intent

c++ - 如何解决 <<ClassName>> 的 "undefined reference to ` vtable 错误?

c++ - 如何使用构造函数委托(delegate)在 C++ 中使用命名构造函数?

android - 在 Activity 的 init block 中使用 'this' 作为上下文?

JavaScript:如何检测ES6类有自己的构造函数?

java - 并行流处理 vs 线程池处理 vs 顺序处理

java - 将纬度和经度( double )数据转换为字节数组,以便将其作为 java 中的 Geometry 或 GeometryCollection 值存储在 mySql 中

java - 如何从命令行使用 jarjar?

c++ - 这行得通吗? C++ 多重继承和构造函数链接