2016-04-08 7 views
3

引用:ブロッホの効果的なJavaの第2版では一定のフィールドの定義

のstatic finalフィールドが変更可能な参照型を持っている場合、参照オブジェクトは不変であるならば、それはまだ一定のフィールド することができます。

この意味はわかりません。誰かがそれの例を挙げることができますか?

+0

効果的なJavaの:これにconstrastで

は不変あるStringのようなもの、です。 ** Page 238 ** https://books.google.es/books?id=ka2VUBqHiWkC&pg=PA238&lpg=PA238&dq=%22static+final+field+has+a+mutable+reference+type%22&source=bl&ots=yZIfJew4P3&sig=tvjvW3oooSNxNRaGF57ru2VwL8c&hl = es&sa = X&ved = 0ahUKEwi-1Z3S5P7LAhULVxoKHRIfCToQ6AEILTAC#v = onepage&q =%22static%20final%20field%20has%20a%20mutable%20reference%20type%22&f = false – Nirekin

答えて

6

例ジョシュが話していることが可変タイプである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可変です!誰もがそのような変化を見るでしょう。

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

あなたは不変のサブタイプと可変タイプ持つことができます。

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(); 
関連する問題