不可扩展且其字段全部为
final自身且不可变的类的实例是不可变的。
由于其方法的详细信息而无法更改其字段的类的实例实际上是不可变的。例如:
final class C { final boolean canChange; private int x; C(boolean canChange) { this.canChange = canChange; } public void setX(int newX) { if (canChange) { this.x = newX; } else { throw new IllegalStateException(); } }}的某些实例
C实际上是不可变的,而有些则不是。
另一个例子是零长度数组。它们实际上是不可变的,即使它们的包含类不是可证明的不可变的,因为它们中没有元素可以更改。
Joe-
E使用验证程序来证明某些类仅允许不可变的实例。
Immutable检查用标记器接口标记的所有内容,并将某些类
String((由于它
char[]不会逃逸,因此实际上是不可更改的))视为不可变的。
Joe-E:面向安全性的Java子集说
由Joe-E库定义的Immutable接口受到以下语言的特殊处理:Joe-
E验证程序检查实现此接口的每个对象都是(深度)不可变的,如果不能自动将其引发编译时错误。已验证。



