覆盖 Hashtable.contains() java 时出现 StackOverflowError

StackOverflowError when overriding Hashtable.contains() java

我必须创建一个 class 来继承 Hashcode 并且我需要覆盖 contains 方法。

@Override
public boolean contains(Object value) {
    if (!this.containsValue(value))
        return true;
    return false;
}

public void add(Object key, Object value) {
    if (!this.contains(value)) {
        this.put(key, value);
    }
}

编译得很好,但是当我 运行 它时,我得到了 WhosebugError。我想我得到了一些递归无限循环,但我无法弄清楚。欢迎任何帮助! printscreen of the error

您在 contains 中调用 containsValue 但是查看 HashTable 中的代码您可以看到 containsValue 将再次调用 contains 并且这将重复直到出现堆栈溢出...

在HashTable.class

public boolean containsValue(Object value) {
    return contains(value);
}

你真的应该这样做

@Override
public boolean contains(Object value) {
    if (!super.contains(value))
        return true;
    return false;
}

或者干脆不要覆盖 contains,因为这已经在执行您要重新实现的内容了。