【发布时间】:2021-07-16 15:21:48
【问题描述】:
有没有办法在构造函数中实现this = that? that 是我要复制的对象(因此是与 this 相同类的对象,this 是对象引用)。
class Foo {
private final Bar bar;
public Foo() {
Foo that = DaggerFactory.create().getFoo();
// this = that; but it's not working!?
}
@Inject
public Foo(Bar bar) {
this.bar = bar;
}
// Other methods
}
我已经看到了复制构造函数的示例,它们将成员一一复制,即this.bar = that.bar。这是我最后的选择,因为我的班级里只有少数成员,我不想不必要地“弄乱”我的代码。
附:我确实想通过空构造函数实例化对象,因为这就是 AWS Lambda 的工作方式(我将在其中部署它)。到目前为止,我还没有找到任何方法可以让 Lambda 使用 Dagger 提供的对象。如果关于 Lambda / Dagger 有更好的方法,那就太好了!
【问题讨论】:
-
没有办法让构造函数返回一个使用工厂方法创建的对象(例如您的示例中的
DaggerFactory.create().getFoo())。构造函数运行时,对象已经存在,需要初始化。在 Java 中无法分配给this。 -
不,没有速记。
-
您可能会看看 lombok 的 Builder(toBuilder=true),它为您提供了一个可以满足您需要的构建器。
-
@juwil 酷!会调查
-
@Jesper 让我们暂时忘记工厂。如果它是一个常规的复制构造函数呢?一个一个地复制成员是唯一的选择吗?
标签: java aws-lambda dagger-2 copy-constructor