2

Mapを実装するカスタムクラスをJavaで実装しています。マップAPIによると、put(k、v)メソッドとputAll(map)メソッドに対してIllegalArgumentExceptionをスローする必要があります。

次のような場合は、この例外をスローすると思います。

MyMapClass<Integer, Integer> map = new MyMapClass<Integer, Integer>;

それから私は電話します

map.put ("hello",5).

これが例外を引き起こすはずの状況であると私は正しいですか?

もしそうなら、私はこれをどのようにテストすることができるかについていくつかの方向性を得ることができますか?putメソッドに含まれるオブジェクトkとvのタイプを確認する方法がわかりません。

4

2 に答える 2

3

これは、コンパイラが整数を予期している場所で文字列を使用しようとすると、コンパイル時エラーになります。IllegalArgumentException をスローする必要がある一般的なケースはありません。これは、別の方法では適用されない特別なルールがある場合に、インターフェイスがマップで実行できるオプションにすぎません。

コンテンツに適用する特別な制限がない場合、例外をスローする理由はありません。java.util.HashMapあなたは実際にそれを投げていないことに気付くでしょう!

たとえば、正の整数のみがキーとして受け入れられるクラスがある場合:

public class MyMapKeyedOnPositiveInts<V> implements Map<Integer, V> {

    public V put (Integer key, V value) {
        if (key < 0) throw new IllegalArgumentException();
        //do put
    }
}
于 2012-12-05T01:08:06.810 に答える
2

Mapインターフェース Java 5 (現在まで)の Java API によると、IllegalArgumentException; を使用します。

このキーまたは値の一部がこのマップに格納できない場合

あなたが提供した例は、Map API が必要とするものではありません。これは Generics によるものです。Java 5+ では、Java は上記で指定したコンパイル時エラーになることを保証するため、putおよびputAllメソッドで正しい型をチェックする必要がないので安心できます。

では、JavaDocからの上記のステートメントは、Mapあなたにとって何を意味するのでしょうか? それは、インターフェイスの実装で何をしているのかに大きく依存しMapます。Javaでの の実装の多くは、例外 ( 、、など)Mapをスローしません。HashMapTreeMapConcurrentHashMap

于 2012-12-05T01:13:43.790 に答える