簡體   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