类的不变性仅取决于其字段吗?
如果一个类有一个成员类没有标记为final而是标记为“静态类”,并且这个内部类的成员也是final的,,并且封闭的外部类的所有字段都被标记为final,那么如何处理将为外部类描述不变性?
最佳答案
不,这不取决于。
从更广泛的意义上来说,如果任何时候的所有方法调用都会返回相同的结果,则类是不可变的。
很好的例子是java.lang.String
类,其中hashcode
当您调用 hashcode()
时,字段发生变化第一次,但是返回的结果是相同的。
更严格的解释是初始化后没有字段可以更改。它可以实现,例如通过不声明公共(public) setter ,并避免类内的任何更改。另一种方法是 - 正如您所提到的 - 将字段声明为 final.
关于java - java中类的不可变性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17144121/