Java 使对象不可变的可能方法
我正在寻找一些有效的方法来构建一个不可变的类,就像Java的字符串类一样。如果对象的任何字段都不能修改,那么对象是不可变的,因此这些字段必须是Java 使对象不可变的可能方法,java,immutability,Java,Immutability,我正在寻找一些有效的方法来构建一个不可变的类,就像Java的字符串类一样。如果对象的任何字段都不能修改,那么对象是不可变的,因此这些字段必须是final。如果不希望对象被子类化,也可以将类本身设置为final,就像String一样。 要轻松构建包含大量信息的不可变对象,您应该查看 有关详细信息,请参见如果对象的任何字段都不能修改,则该对象是不可变的,因此这些字段必须是最终的。如果不希望对象被子类化,也可以将类本身设置为final,就像String一样。 要轻松构建包含大量信息的不可变对象,您应该
final
。如果不希望对象被子类化,也可以将类本身设置为final,就像String一样。
要轻松构建包含大量信息的不可变对象,您应该查看
有关详细信息,请参见如果对象的任何字段都不能修改,则该对象是不可变的,因此这些字段必须是
最终的
。如果不希望对象被子类化,也可以将类本身设置为final,就像String一样。
要轻松构建包含大量信息的不可变对象,您应该查看
有关更多信息,请参见,如果您使用构造函数填充所有字段并将字段设置为最终字段-您已经完成了一部分 如果字段使用自定义类型,则可能还需要使其不可变 为安全起见,属于集合的任何字段都应使用不可修改的集合 你需要担心对象图 对象上的任何方法都需要注意非final字段。例如,String.add创建一个新的字符串。如果您需要修改一个字段,请通过复制构造函数进行修改
最后使对象成为最终对象 如果您使用构造函数填充所有字段并将字段设置为最终字段,那么您已经完成了一半 如果字段使用自定义类型,则可能还需要使其不可变 为安全起见,属于集合的任何字段都应使用不可修改的集合 你需要担心对象图 对象上的任何方法都需要注意非final字段。例如,String.add创建一个新的字符串。如果您需要修改一个字段,请通过复制构造函数进行修改 最后使对象成为最终对象
private
最好是final
集合。不可修改*
。此外,集合应仅包含不可变对象final
可以是可选的<代码>字符串类
有一个缓存哈希变量,只有在调用哈希函数时才分配该变量
private
最好是final
集合。不可修改*
。此外,集合应仅包含不可变对象指出,
final
可以是可选的String
class
有一个缓存hash
变量,只有在调用hash函数时才分配它。如果他不想要子类,他也应该使类本身成为最终类。如果他不想要子类,他也应该使类本身成为最终类。你在寻找一个类似于String功能的类吗?起初我并没有这样读你的问题,但如果你读了,我会用一些字符串特定的例子来改变我的答案。它不是一个原始的类型,但你也不能认为它是一个类。字符串是唯一重载+运算符的“类”。添加两个字符串将得到一个新字符串。在常规类中不允许操作符重载。不能考虑String类吗???string类重写+运算符吗?或者编译器为你变魔术了吗?是的,不是功能方面的。它的行为应该与不可变类应该做和不应该做的相同。您正在寻找一个类似于字符串功能的类吗?起初我并没有这样读你的问题,但如果你读了,我会用一些字符串特定的例子来改变我的答案。它不是一个原始的类型,但你也不能认为它是一个类。字符串是唯一重载+运算符的“类”。添加两个字符串将得到一个新字符串。在常规类中不允许操作符重载。不能考虑String类吗???string类重写+运算符吗?或者编译器为你变魔术了吗?是的,不是功能方面的。它的行为应该与不可变类应该做和不应该做的相同。Sun字符串实现中有一个实例字段不是最终的。这一点很好。”“最终”不是一个要求。字符串中的hash变量就是一个完美的例子。您还应该考虑将类设为final,以确保没有派生类公开受保护的字段。hashCode不是final,因为它是惰性设置的。它只有一个实际值,所以它将显示为最终值。我使用不可变类,它一直扩展其他不可变类。不确定为什么需要将不可变类设为final,除非您担心它可能会被可变类扩展。否则我同意。Sun字符串实现中有一个实例字段不是最终的。这一点很好。”“最终”不是一个要求。字符串中的hash变量就是一个完美的例子。您还应该考虑将类设置为final,以确保