かつのりの日記2

わんくまでは珍しいJavaを中心とした日記です

目次

Blog 利用状況

書庫

日記カテゴリ

いろいろリンク

変更しない変数にfinalを付けるべきですか?

@ITでオブジェクトの不変性を保障するには・・・みたいなネタが挙がっていたのでちょっと書きたいと思います。

まずfinalな変数は不変であるかというと、不変ではありません。変数が示す参照値が不変になるだけで、参照によって指し示されるインスタンス自体は不変ではない可能性があります。可能性があるというのはインスタンスの特性次第ということです。

このように、final変数が不変性を意味しない事が分かると思います。では不変であることを保障する為にはどうすればよいのでしょうか。これにはいくつかの方法があります。

まず、状態の変更が可能なメソッドを、そもそも公開しないパターンです。インターフェイスを使用して、公開範囲を限定的にします。

次に、デコレータパターンでラップして、状態変更メソッドを実行すると例外をスローするパターン。

そして最後にクローンを渡すパターン。クローンだから変更されても何も影響がないという方法で、不変ではないのですが、変更されても問題にならないようにする方法です。

ちなみに、元ネタはこちらです。 変更しない変数にfinalを付けるべきですか?

投稿日時 : 2007年4月6日 1:00

Feedback

# re: 変更しない変数にfinalを付けるべきですか? 2007/04/06 1:46 じゃんぬねっと

> 変数が示す参照が '不変であるだけ' で、
> 参照によって指し示されるインスタンス '事態' は '不変である' 可能性があります。

ん?

# re: 変更しない変数にfinalを付けるべきですか? 2007/04/06 2:08 かつのり

何か日本語おかしいwww
直しました。ありがとうございます~。

タイトル
名前
Url
コメント