如何使哈希表在插入空键(Java)时引发异常?

如何使哈希表在插入空键(Java)时引发异常?,java,arrays,null,hashtable,illegalargumentexception,Java,Arrays,Null,Hashtable,Illegalargumentexception,对于评估,我需要创建一个哈希表,我已经完成了。但是,在插入null键时,我需要抛出一个异常 我需要通过的测试是: @Test(expected = IllegalArgumentException.class) public void testNullKey() { Hashtable<Boolean> h = new Hashtable<>(10); h.put(null, true); } 我完全不知道在插入空密钥时引发异常。我已尝试添加抛出新的Il

对于评估,我需要创建一个哈希表,我已经完成了。但是,在插入null键时,我需要抛出一个异常

我需要通过的测试是:

@Test(expected = IllegalArgumentException.class)
public void testNullKey() {
    Hashtable<Boolean> h = new Hashtable<>(10);
    h.put(null, true);
}
我完全不知道在插入空密钥时引发异常。我已尝试添加
抛出新的IllegalArgumentException()
和其他类似的尝试在
中放置
,但我无法让它工作


有人有什么想法或建议吗?

好的。所以这个
Hashtable
类是您的代码,而不是
java.util.Hashtable
。(你骗了我一分钟…)

解决办法很简单。显式测试
以查看它是否为
null
,并引发所需的异常:

if (key == null) {
    throw new IllegalArgumentException("key is null");
}
我会让你去找出把代码放在哪里最好



另一种方法是将
NullPointerException
设置为预期的异常。。。但是我对您问题的理解是,测试用例正在检查需求是否得到满足。

为空时,表达式
键.hashCode()
将抛出
NullPointerException
,那么您为什么期望出现
IllegalArgumentException
调整您的期望值,即将测试代码更改为
@test(expected=NullPointerException.class)
“那么您为什么期望出现IllegalArgumentException?”。遗憾的是,我不是。这是一个我们需要通过标记的测试。然后添加一个
if
语句,在代码尝试执行
key.hashCode()
之前抛出一个
IllegalArgumentException
。这有什么不明显的?重载名称
哈希表
,即使它在您自己的包中,通常都是一个坏主意™.
private int hash(String key)
{
    int hashVal = key.hashCode();
    hashVal %= max;

    if (hashVal < 0)

        hashVal += max;

    return hashVal;
}
public void put(String key, V value)
{
    int h = 0;

    if (getLoadFactor() > maxLoad)
        resize();

    h = probeType == PROBE_TYPE.LINEAR_PROBE ? hash(key) : doubleHash(key);

    if (get(key) != null)
    {
        arr[h] = new Pair(key, value);
    } else
    {
        arr[findEmpty(h, 0, key)] = new Pair(key, value);
        itemCount++;
    }
}
if (key == null) {
    throw new IllegalArgumentException("key is null");
}