引用:ブロッホの効果的なJavaの第2版では一定のフィールドの定義
のstatic finalフィールドが変更可能な参照型を持っている場合、参照オブジェクトは不変であるならば、それはまだ一定のフィールド することができます。
この意味はわかりません。誰かがそれの例を挙げることができますか?
引用:ブロッホの効果的なJavaの第2版では一定のフィールドの定義
のstatic finalフィールドが変更可能な参照型を持っている場合、参照オブジェクトは不変であるならば、それはまだ一定のフィールド することができます。
この意味はわかりません。誰かがそれの例を挙げることができますか?
例ジョシュが話していることが可変タイプである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
あなたは不変のサブタイプと可変タイプ持つことができます。
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();
効果的な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