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