gpt4 book ai didi

java - 我应该创建一个带有 setter 的构造函数吗

转载 作者:行者123 更新时间:2023-12-02 14:06:56 26 4
gpt4 key购买 nike

每次我创建一个新类时,我都想知道创建构造函数的最佳方法是什么。如果我使用 IntelliJ 中的默认构造函数,它将创建一个类似于示例 A 的构造函数。但是在学校我们学习使用方法 B。

A和B之间有什么大的区别吗?

是否有某种首选方法或者只是程序员的选择?

示例A:

public Model(int modelNumber) {
this.modelNumber = modelNumber;
}

示例B

public Model(int modelNumber) {
setModelNumber(modelNumber);

}

public void setModelNumber(int modelNumber) {
this.modelNumber = modelNumber;
}

最佳答案

除非您的类被标记为final,否则当前形式的示例 B 肯定是错误的。

您需要遵循的原则是您不得从构造函数中调用可重写的方法。如果您不遵守该规则,则无法维护类不变量:您无法保证子类不会更改 setModelNumber() 的作用,并且最终可能会得到 modelNumber 字段尚未初始化为预期值。

不遵循这一原则可能会带来其他不太明显但同样具有破坏性的结果 consequences也是。

因此,通常最好直接从构造函数设置字段。不仅如此,对于 final 字段,这是您的唯一选项。

关于java - 我应该创建一个带有 setter 的构造函数吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34066701/

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