私はコレクションが変更されるべきでないことを強制するには、少なくとも2つのメカニズムを知っている:Javaはコンパイル時に不変性チェックを許可しますか?
- Javaの変更不可能なコレクション:http://www.tutorialspoint.com/java/util/collections_unmodifiablelist.htm
- グアバの不変コレクション:http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableList.html
は、しかし、私は両方のに気づきます例外を投げることによって(例えばUnsupportedOperationException)、ランタイムで契約を強制します。
質問:
- です不変性チェックはコンパイル時で行うことを可能にするが、既存のライブラリ/言語機能?
- そうでない場合、どうしてですか?それは言語の制限、設計上の決定の結果、または他の何らかの理由によるものですか?
明示的にhttp://docs.oracle.com/javase/1.5.0/docs/guide/collections/designfaq.html#1を呼び出して、これについて説明します。 (Tl; dr:彼らは試してあきらめました) –
この回答は両方の質問に対処しています。 – maditya