[英]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.