2
public class Hi {
    private final Map<String, String> map;
    public Map<String, String> getMap() {
        return map;
    }
}

この Hi クラスがあり、マップを不変にしたい。ゲッターも必要です。現在、別のクラスがゲッターからマップを変更できます。この問題を解決するためにマップのコピーを返したいのですが、Map はインターフェイスであるため、getter 呼び出しを行う必要があります。

return new HashMap<String,String>(map);

マップを強制的にハッシュマップにせずにそれを行う別の方法はありますか? 以前と同じクラスを維持したいと思います。

4

2 に答える 2

10

Return 。これは、ラップCollections.unmodifiableMap(map)する の変更不可能なビューを提供します。そのメソッドの JavadocMapからの引用:

指定されたマップの変更不可能なビューを返します。この方法により、モジュールはユーザーに内部マップへの「読み取り専用」アクセスを提供できます。返されたマップに対するクエリ操作は、指定されたマップまで「読み取り」、直接またはそのコレクション ビューを介して返されたマップを変更しようとすると、UnsupportedOperationException が発生します。

于 2013-10-01T20:21:46.287 に答える
0

Collections API を使用して unmodifiableMap を返します。 http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#unmodifiableMap(java.util.Map)

于 2013-10-01T20:22:32.613 に答える