gpt4 book ai didi

java - 使用实例初始值设定项来处理构造函数重载

转载 作者:行者123 更新时间:2023-12-01 17:55:22 24 4
gpt4 key购买 nike

我有时看到的一种模式是构造函数可能不带参数或只有一个参数。现在,我想知道“更好”的方法是将通用代码移动到最定义的构造函数中,还是在这种情况下使用实例初始值设定项。例如,始终为创建的每个类生成 ID 的一种方法:

 public SomeClass(){
this("Hello");
}

public SomeClass(String s){
this.s = s;
this.id = generateId();
}

而不是这样写:

 {
this.id = generateId(); // method does not depend on the class
}

public SomeClass(){
this("Hello");
}

public SomeClass(String s){
this.s = s;
}

使用实例初始化程序的原因是因为我希望始终在创建类时运行该方法,而将来其他人可能会更改类的构造函数并忘记执行此操作。虽然删除实例初始值设定项的可能性较小(没有意识到您在做什么)。

但另一方面,我不确定这种情况下的可读性如何。

这些示例有点做作,不是现实世界的示例。

最佳答案

The reason for using the Instance Initializer would be because I want to always run the method when the class is created, and in the future someone else might change the class's constructors and forget to do this. Whilst it is less likely to remove the intance initializer (without realising what you are doing).

执行其中一项(使用实例初始化程序)或另一项(构造函数)不应被用作避免修改类时出现编码错误的技巧。
无论如何,为什么初始化程序会为此提供更好的保障?

您想确保构造函数执行其设计的操作吗?
编写一个单元测试来验证此行为并在每次构建时自动执行。
仅此而已。

关于java - 使用实例初始值设定项来处理构造函数重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45432053/

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