わんくま掲示板より Hashtable#putで不定期に例外発生
HashtableでNullPointerExceptionが発生するけど、キーにnullがわたるはずないんだけどなぁ、という話題。どうやら原因はキーではなく、値のほうにnullが渡っていたらしいとのこと。
java.util.HashMapなどはキーにも値にもnull値を許す実装になっています。このへんはjava.util.Mapの実装クラスに委ねられており、その実装の思い込みがこの問題を引き起こしていたわけです。というわけでjava.util.Mapの実装でキーと値のnull値への対応表を用意しました。なお、抽象クラスは実装に依存するので割愛。
なお、TreeMapのキーの部分が△になっていますが、Comparatorを用いない場合 (オブジェクトの自然順序付けによるソート)にはキーのnull値が許されません。また、Comparatorを用いていても、Comparatorがnull値を許さない場合はnullキーを用いることが出来ません。
また、java.util.Map自体がJDK1.2からの導入なので、1.0から存在するクラスについては 1.2時点でMapインターフェースを実装するようにAPIの仕様が変更になったと理解してください。 JDK1.0やJDK1.1のコンパイラでは当然ながらMapインターフェースが存在しないため、Map型への代入などはできません。
投稿日時 : 2007年10月23日 18:58