java - 可以公开不可变对象(immutable对象)的状态吗?

标签 java immutability value-objects

最近遇到了不可变对象(immutable对象)的概念,我想知道控制对状态的访问的最佳实践。尽管我大脑中面向对象的部分让我想在看到公众成员时畏缩不前,但我认为这样的事情没有技术问题:

public class Foo {
    public final int x;
    public final int y;

    public Foo( int x, int y) {
        this.x = x;
        this.y = y;
    }
}

我会觉得将字段声明为 private 并为每个字段提供 getter 方法会更舒服,但是当状态显式只读时,这似乎过于复杂。

提供对不可变对象(immutable对象)状态的访问的最佳做法是什么?

最佳答案

这完全取决于您将如何使用该对象。公共(public)领域本质上并不是邪恶的,将所有内容默认为公共(public)领域是很糟糕的。例如 java.awt.Point 类将其 x 和 y 字段公开,它们甚至不是最终的。您的示例似乎很好地使用了公共(public)字段,但是您可能又不想公开另一个不可变对象(immutable对象)的所有内部字段。没有包罗万象的规则。

关于java - 可以公开不可变对象(immutable对象)的状态吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21910769/

相关文章:

java - 根据条件将常量值分配给不同变量之一

java - JAVA 中字符串的不可变性

c# - 在 C# 中,为什么我不能在 foreach 循环中修改值类型实例的成员?

spring-mvc - Spring 和 MongoDB : Saving Value Objects in a more flat way

Java instanceof 内部类无法转换错误

java - Apache Ignite 中单个分区上的 ScanQuery 是单线程还是多线程?

validation - 验证不可变字段

oop - 域对象和值对象-它们相等吗?

java - eclipse从哪个目录启动jvm?