如何在Java中实现构造函数包装?

yegor256:

这是我想要做的(在Java 1.6中):

public class Foo {
  public Foo() {
    Bar b = new Bar();
    b.setSomeData();
    b.doSomethingElse();
    this(b);
  }
  public Foo(Bar b) {
    // ...
  }
}

编译器说:

call to this must be first statement in constructor

有什么解决方法吗?

斯蒂芬·C:

您可以这样实现:

public class Foo {
  public Foo() {
    this(makeBar());
  }
  public Foo(Bar b) {
    // ...
  }
  private static Bar makeBar() {
    Bar b = new Bar();
    b.setSomeData();
    b.doSomethingElse();
    return b;
  }
}

makeBar方法应该是静态的,因为与之相对应的对象this在您调用该方法时不可用。

顺便说一句,这种方法的优点是确实将完全初始化的Bar对象传递给Foo(Bar)(@RonU指出他的方法没有。这当然意味着他的Foo(Bar)构造函数不能假设其Foo参数处于最终状态。这可能会出现问题。)

最后,我同意静态工厂方法可以替代此方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我如何在 kotlin 中实现类似 java 的构造函数

私有构造函数如何在Java中实现发布安全

如何在Swift子类中实现复制构造函数?

如何在Scala中实现OCaml / F#的“函数”构造?

如何在python中实现多个构造函数?

如何在PHP中实现复制构造函数?

如何在源文件中实现嵌套类构造函数

如何在ES6中实现命名构造函数

如何在 C++ 中实现复制构造函数

如何在Java中实现包装装饰器?

如何在IO monad中包装的值上使用数据构造函数?

如何在java中的构造函数中设置字段

如何在构造函数内部包装使用Proxy构建的对象?

如何在Java中确定构造函数调用?

如何在JAVA中获得静态构造函数的功能?

如何在Java中强制执行构造函数

如何在Linux上重新实现(或包装)syscall函数?

Java包装器:覆盖在超级构造函数中调用的方法

如何在javascript中制作包装函数?

如何在Promise中包装异步函数?

如何在Python中为抽象类定义构造函数实现?

如何在Python中为抽象类定义构造函数实现?

如何在data.table包中实现列表构造函数的点(。)别名?

如何在构造函数中实现参数和路径相关的类型参数化?

如何在打字稿中定义函数调用签名的实现和构造签名

如何在临时容器类中实现复制构造函数和赋值运算符?

如何在Java中实现Oracle用户定义的聚合函数

如何在 Java 中实现 CryptoJS.AES.encrypt 函数?

如何在子类构造函数中调用父构造函数?