繁体   English   中英

Bloch的Effective Java第2版中常量字段的定义

[英]Definition of a constant field in Bloch's Effective Java 2nd edition

引用:

如果静态final字段具有可变引用类型,则如果引用的对象是不可变的,则它仍然可以是常量字段。

我不确定这是什么意思; 有人可以给出一个例子吗?

Josh正在谈论的一个例子是List ,它是一个可变类型( add()remove()等),但你可以为它分配一个不可变的实例:

public static final List<String> NAMES = Collections.unmodifiableList( Arrays.asList("foo", "bar")); // immutable

顺便说一下,一个看起来像常量但不是的常量的一个很好的例子是Date常量:

public static final Date EPOCH = new Date(0);

但是一些代码可以做到这一点:

EPOCH.setTime(123456789); // oops!

Date可变的 每个人都会看到这样的变化。

与此类似,就像String一样,它不可变的:

public static final String NAME = "Agent Smith"; // immutable

您可以使用具有不可变子类型的可变类型:

class Mutable {}  // Not immutable, because it can be extended.

final class Immutable extends Mutable {}

// Reference type is mutable, but referenced object is immutable.
static final Mutable CONSTANT = new Immutable();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM