web-dev-qa-db-ja.com

クラスはJavaで不変であることをどのように注釈すべきですか?

私は最近、不変オブジェクトがどれほど有用であるかを偶然見つけました。コンストラクタに要素を渡し、クラスが不変である必要がある場合、それら自体が不変でない場合は、これらの要素をコピーする必要があります。

これには、プロジェクトに関する多くのチェックや知識が必要です。

public A(B foo)

Bは不変ではありません。ABをコピーする必要があります。 Bは不変に見えますが、コンストラクタ自体に可変クラスがあると想像してください。

クラスがJavaで不変かどうかを文書化するための標準またはベストプラクティスはありますか? Javadocに@immutableキーワードがないようです。

@ Immutableアノテーション は、自動Javaクラス生成ではまったく異なるものであり、標準Javaの一部ではないようです。

14
Aufziehvogel

String クラスのドキュメントを見る(太字のテキストは私がしたことです):

Stringクラスは文字列を表します。 Javaプログラムのすべての文字列リテラル( "abc"など)は、このクラスのインスタンスとして実装されます。文字列は定数であり、値は変更できません文字列バッファは可変文字列をサポートします。文字列オブジェクトは不変なので、共有できます。

ご覧のとおり、特定のラベルやその他のマーカーはありませんが、それらは、クラスを記述するJavaDocでStringクラスが定数の不変オブジェクトを表すことを指定しています。

したがって、 this Oracleチュートリアルで提供されている指示に従って不変のクラスを作成し、クラスの不変性が文書化されていることを確認した場合は、クラスとその機能を説明するJavaDoc。

それでも必要なものが適切でない場合は、カスタムJavaDocタグ here を作成する方法を確認できます。

7
npinti
4