一般的に言えば、Javaで不変オブジェクトを使用するほど、私はもっと良いアイデアだと思っています。彼らは自動的にスレッドセーフでクローン作成やコンストラクタのコピーを心配する必要がないという利点をたくさん持っています。Javaの不変なキーワードは良いアイデアでしょうか?
これは私には「不変の」キーワードが間違っていると思いますか?明らかに、言語に別の予約語を追加することには欠点があり、主に上記の理由でそれが実際に起こるのではないかと疑いますが、それを無視して、多くの欠点は実際には分かりません。
現在、オブジェクトは不変であることを確認するために注意を払わなければならず、コンポーネントオブジェクトを主張するdadgy javadocのコメントでも、事実上すべてを破壊することはできません。また、ストリングのような基本的なオブジェクトでさえも、攻撃を反射するのは容易に想像できるので、真に不変ではないという議論もあります。
不変のキーワードがあれば、コンパイラは再帰的にチェックし、クラスのすべてのインスタンスが不変であることを保証することができます。これは現在実行できません。特に並行性がますます高くなるにつれて、私は個人的にこの効果にキーワードを追加することをお勧めします。しかし、私はこれが悪い考えになる欠落している欠点や実装の詳細はありますか?
これは不要で、使用には極端に制限されています。 – Falmarri
@Falmarri逆に、私は不変のオブジェクトがかなり多く使われていると思います。 –
C++は 'const'でジョブを実行します。個人的には、もしJavaが似たようなキーワードを持っていれば、私は非常に満足しています。なぜなら、(例えば) 'Collections.unmodifiableCollection'のようなもので回り込むことなく、特定のインスタンスを不変としてマークすることができるからです。 'const'と' mutable'(遅延読み込みを可能にする)の組み合わせは、良いものと思われます。 –