gpt4 book ai didi

java - 不可变对象(immutable对象)和有效不可变对象(immutable对象)之间的区别?

转载 作者:IT老高 更新时间:2023-10-28 20:52:57 25 4
gpt4 key购买 nike

这是Java并发实践中的一句话

Shared read-only objects include immutable and effectively immutable objects.

不可变对象(immutable对象)和有效不可变对象(immutable对象)之间有什么区别?

最佳答案

一个不可扩展的类的实例,其字段都是 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 使用 validator 来证明某些类只允许不可变实例。任何标有 Immutable标记接口(interface)被检查,并且像 String 这样的某些类(实际上是不可变的,因为它的 char[] 不会转义)被视为不可变的。

Joe-E: A Security-Oriented Subset of Java

The Immutable interface, defined by the Joe-E library, is treated specially by the language: the Joe-E verifier checks that every object implementing this interface will be (deeply) immutable, and raises a compile-time error if this cannot be automatically verified.

关于java - 不可变对象(immutable对象)和有效不可变对象(immutable对象)之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16678416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com