今天出现了一个有趣的问题。为我知道在构造函数之后永远不需要重新设置的字段设置 setter 是一个好习惯吗?
附注当然,我理解使用私有(private)字段和 getter 与公共(public)字段的原因,这是有道理的,但是如果我不打算使用它,我真的应该创建一个 setter 吗?
P.P.S。特指 Java,尽管什么平台并不重要。
最佳答案
通过不创建 setter 并仅允许通过构造函数设置字段,您创建了一个不可变字段。一旦创建了类的实例,该值就永远不会改变。
注意:如果 getter 返回的值本身是可变的,则上面的语句将不成立。比如说,如果返回 ArrayList 的实例,则有人可以使用该引用来添加和删除该列表中的项目。查看 java.util.Collections.unmodifyingList 来解决这个问题。即使是 java.util.Date,如果您在 getter 中返回它,也可以更改它。要解决这个问题,您可以使用 JodaTime(或其他类似的第三方日期类),或者等待 Java 8。
在我看来(其他人并不总是那么谦虚),不变性是一件伟大的事情,它可以减少软件的错误并且更容易维护。
关于java - 即使我知道我永远不会需要它,在我的对象中包含一个 setter 是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18542699/