java - 即使我知道我永远不会需要它,在我的对象中包含一个 setter 是一个好习惯吗?

标签 java object setter getter

今天出现了一个有趣的问题。为我知道在构造函数之后永远不需要重新设置的字段设置 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/

相关文章:

java - Spring mvc hibernate jsp问题

java - 如何控制 Spring bean 创建的顺序?

Java 练习...需要不使用 getter 和 setter 的帮助

r - 内存中没有变量名的数据仍然是 R 中的对象吗?

c# - 具有后备属性的 setter 中的 StackOverflowException

ios - 在 Objective-C 的实现文件中的 setter 方法中去除 NSString 中的特殊字符

java - 排序算法

java - JPA批量插入不释放内存

java - 对象数组 - 从数组中删除对象

python - 如何将子进程对象传递给数组