在java中实现我自己的Map API,如何抛出IllegalArgumentException?

时间:2012-12-05 00:58:07

标签: java api class map

我在java中实现了一个实现Map的自定义类。根据map api,我需要为put(k,v)和putAll(map)方法抛出IllegalArgumentException。

我相信如果我有类似的话,我会抛出此异常:

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

然后我打电话

map.put ("hello",5).

我是否正确,这是应该导致异常的情况?

如果是这样,我可以就如何测试这个问题找到方向吗?我不知道如何找出put方法中k和v的对象类型。

2 个答案:

答案 0 :(得分:3)

尝试使用编译器期望Integer的String时,这将是一个编译时错误。没有一般情况你需要抛出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
    }
}

答案 1 :(得分:2)

根据Java API for Map接口Java 5(当前)你通过IllegalArgumentException;

  

如果此键或值的某些方面阻止它存储在此地图中

您提供的示例不是Map API所需的示例,这是因为Generics。在Java 5+中,Java将确保它是您在上面指定的编译时错误,因此您可以放心,您不需要在putputAll中检查正确的类型方法

那么Map JavaDoc上面的语句对你来说意味着什么呢?那么它真的取决于你在Map接口的实现中做了什么。 Java中的许多Map实现都不会抛出异常(HashMapTreeMapConcurrentHashMap等。