final 表示类不能扩展。您仍然可以创建该类的多个实例。例如:
class ImmutableInt {
int value;
public ImmutableInt( int val ) {
this.value = val;
}
public int getValue() {
return value;
}
// no setter because I don't want people to change it!
}
在上述情况下,我可以创建多个 ImmutableInt 实例。
ImmutableInt int1 = new ImmutableInt( 10 );
ImmutableInt int2 = new ImmutableInt( 100 );
这两个实例将始终设置为值 10 和 100。
现在假设有人决定他们希望能够更改 ImmutableInt 的值,所以他们extend
使用 ImmutableInt 并提供一个 setter。好吧,这对于应该是的东西来说真的没有意义immutable
所以,我final
在类中添加说,“没有人可以扩展这个类来打破我的不变性契约。” 我还添加final
到该字段,以便它只能在构造函数中初始化,之后不能更改。
final class ImmutableInt {
final int value; // no default value here means it must be set in the constructor
public ImmutableInt( int val ) {
this.value = val;
}
public int getValue() {
return value;
}
// no setter because I don't want people to change it!
}