提问人:Eeshaan 提问时间:4/22/2021 最后编辑:Eeshaan 更新时间:4/22/2021 访问量:1949
是否有在构造函数中复制对象的速记?
Is there a shorthand to copy an object within a constructor?
问:
有没有办法在构造函数中实现? 是我想复制的对象(因此是与 相同类的对象,是对象引用)。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
P.S. 我确实想通过空构造函数实例化对象,因为这就是 AWS Lambda 的工作方式(我将在那里部署它)。到目前为止,我还没有找到任何可以让 Lambda 使用 Dagger 提供的对象的方法。如果有更好的 Lambda / Dagger 方法,那也很棒!
答:
1赞
Stephen C
4/22/2021
#1
没有聪明的(快捷方式/速记)方法来编写 Java 中的复制构造函数。在源代码级别,必须一次分配一个字段。
通常,我会“咬紧牙关”并编写代码。但还有其他几种选择:
您的 IDE 可能有办法生成复制构造函数。(Eclipse 没有,但显然你可以为所有字段生成一个常规构造函数,然后在生成的代码上做一些巧妙的搜索替换操作;参见 Eclipse 生成复制构造函数)
可以想象,您可以编写一些可重用的代码,使用反射将字段从一个对象复制到另一个对象。这是相当低效的,但如果你必须处理具有荒谬数量的字段的类,它可能是可以接受的。
您可以改用该机制。
clone()
评论
0赞
Eeshaan
4/22/2021
您碰巧知道类似于 Lombok 的复制构造函数吗?龙目岛似乎没有@NoArgsConstructor
0赞
Eeshaan
4/22/2021
然后我可以使用this(that)
0赞
Stephen C
4/22/2021
如果您要问的是 Java 或 Lombok?这个问题和我的答案是关于Java的。
0赞
Eeshaan
4/22/2021
是的,这些问题是关于Java的,不幸的是,根据评论和你的回答,没有捷径。所以我问你是否知道,根据你的XP,任何注释
0赞
Eeshaan
4/22/2021
因为IDE方式仍然会有“代码混乱”(至少是IMO),我不太确定的反射,也不是我问题的答案clone()
评论
DaggerFactory.create().getFoo()
this