of を使用しfinal
ても、参照でメソッドを呼び出すことはできません。参照自体を変更不可にするだけです。だからあなたの答えは間違っていました。
私の提案は、ジェネリックを使用することです(プログラムではなく、そのようなインタビューにのみ使用してください!):
Map<String, String> map = new HashMap< String, String >();
map.put("a", "b"); // OK
Map< ? extends String, ? extends String > mapRO = new HashMap< String, String >();
mapRO.put("a", "b"); // Compile error
String value = mapRO.get("a"); // OK
ご覧のとおり、ジェネリック型を非表示にすると? extends ...
、「書き込み」メソッド ( などput
) が呼び出されなくなります。これは、通常、型を完全に定義する必要があるためです。しかし、それでも を呼び出すことができるclear()
ので、これは非常にプール セキュリティの概念です。
また、すべての「書き込み」メソッド呼び出しで例外をスローするラッパーを使用することもできます。