gpt4 book ai didi

java - 构造函数可以使用生成器吗

转载 作者:行者123 更新时间:2023-11-29 03:34:31 27 4
gpt4 key购买 nike

我正在重构一个类,以使用带有私有(private)构造函数而不是公共(public)构造函数的构建器。我想让旧的、已弃用的公共(public)构造函数使用如下所示的构建器。 (这是我尝试实现的行为示例)

// old public construcor
@Deprecated
public MyClazz(){
return new MyClazzBuilder().Build();
}

这给出了“无法从结果类型为 void 的方法返回值”

这种类型的功能在 Java 中是否可行?这是如何实现的?

更新:此代码是分布式 jar 的一部分,删除旧的构造函数不是一个选项,因为我需要保持向后兼容性

最佳答案

没有。构造函数对一个对象进行操作,它们不返回它。 [脚注 1]

获得这种功能的一种方法是使用 init() 方法。

@Deprecated
public MyClazz() {
init();
}

public void init() {
// do the actual work
}

现在您的构建器可以调用相同的 init() 方法来避免代码出现在两个地方。

因为您保留了已弃用的签名,所以很难避免将准备实例的逻辑拆分到多个地方。这并不理想,但这是弃用和保持向后兼容性的代价。

[footnote 1] java对象的生命周期是先分配对象内存,但是所有字段都是垃圾内容。接下来,在内存上运行构造函数,通过将所有这些无意义的值更改为实际值,使其进入一致状态。请注意,构造函数所处理的内存已经存在,因此您永远不能用另一个对象代替正在构造的对象。构造函数的返回值正是这种语言不支持的替换。如果需要该技巧,请使用工厂/构建器而不是构造器——构造器永远无法做到这一点。

关于java - 构造函数可以使用生成器吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16242412/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com