2016-04-25 8 views
4

私はコレクションが変更されるべきでないことを強制するには、少なくとも2つのメカニズムを知っている:Javaはコンパイル時に不変性チェックを許可しますか?

は、しかし、私は両方のに気づきます例外を投げることによって(例えばUnsupportedOperationException)、ランタイムで契約を強制します。

質問:

  1. です不変性チェックはコンパイル時で行うことを可能にするが、既存のライブラリ/言語機能?
  2. そうでない場合、どうしてですか?それは言語の制限、設計上の決定の結果、または他の何らかの理由によるものですか?

答えて

2

コレクションAPIのオリジナルの著者(残念ながら)は、不変コレクションと可変コレクションの区別をしていませんでした。不変のAPIには変更方法はありませんが(内部的にはコレクションを内部でPersistent data structureとして再構築する可能性があります)

不変集合と可変集合の両方をサポートするJVMのCollections APIの例として、Scalaを参照してください。

+2

明示的にhttp://docs.oracle.com/javase/1.5.0/docs/guide/collections/designfaq.html#1を呼び出して、これについて説明します。 (Tl; dr:彼らは試してあきらめました) –

+0

この回答は両方の質問に対処しています。 – maditya

2

これは、クラスに変更メソッドを持たないことで可能です。しかし、変更のセマンティクスを持つメソッドを持つ既存のインターフェイスを実装する場合は、静的解析でも一般的な場合は役に立ちません。

関連する問題