って、これダメじゃね?
先のエントリーの続き。
マップがこのキーのマッピングを保持していない場合は null を返します。
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/util/Map.html#get(java.lang.Object)
これは、java.util.Map インターフェイスの仕様な訳です。すなわち、このインターフェイスを実装したクラスは、Map型で受け取れるんですよね。
つまり、Mapの仕様を満たしていなければ問題があるのではないか、と気づいた。上のエントリーの様な、ちょっと弄った実装(fooの無名クラスによる実装)であっても、Map型の変数である限り、開発者はMapの仕様を元にコーディングする訳ですよね。
例えば、上のエントリーのようにfooが定義された(できた)として、Barクラスはこんなコードだったとします。
public class Bar { public static void baz(Map<String, String> quux) { ... } }
そして、他人がBarクラス「だけ」を読んで修正を試みたとします。その時は、その他人は「quuxはMapだから、(MapのJavadocを読むに)対応する値が存在しない場合はnullを返すはずである」と判断するでしょう。
これって、ダメな事ですよね。一般的に何て言うんだろ、こういうの。仕様違反? なんか「カプセル化に違反」とかそのくらいメジャーな言葉があっても良い気がする。これもカプセル化違反の一種かなぁ。
でも、これって「ダメ」ってあんまり認識されてない気がするんですが、現実どうなんでしょうね。俺が知らないだけ?