Mapを返すメソッドを書いているとしましょう。例えば:
public Map<String, Integer> foo() {
return new HashMap<String, Integer>();
}
しばらく考えた結果、このマップが作成された後で変更する理由はないと判断しました。したがって、私はImmutableMapを返したいと思います。
public Map<String, Integer> foo() {
return ImmutableMap.of();
}
戻り値の型を汎用のMapのままにするか、ImmutableMapを返すように指定する必要がありますか?
一方で、これがまさにインターフェースが作成された理由です。実装の詳細を非表示にします。
一方、このままにしておくと、他の開発者はこのオブジェクトが不変であるという事実を見逃す可能性があります。したがって、私は不変オブジェクトの主要な目標を達成しません。変更可能なオブジェクトの数を最小限に抑えてコードをより明確にするため。最悪の場合でも、しばらくすると、誰かがこのオブジェクトを変更しようとする可能性があり、これによりランタイムエラーが発生します(コンパイラーは警告しません)。