java - 重写 Hashtable.contains() java 时出现 StackOverflowError

标签 java overriding stack-overflow

我必须创建一个类来继承 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);
    }
}

编译得很好,但是当我运行它时,我得到了 StackOverflowError。我想我得到了一些递归无限循环,但我无法弄清楚。欢迎任何帮助! 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,因为这已经在执行您要重新实现的操作。

关于java - 重写 Hashtable.contains() java 时出现 StackOverflowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39563516/

相关文章:

java - 如何用编程风格替换@SchedulerLock

java - Java中如何提取字符串

java - Gradle构建jar在运行时找不到依赖项

Ruby隐藏与覆盖

javascript - Node 错误堆栈跟踪未定义

c - 暴力破解幻方时出现堆栈溢出错误。有什么可能的解决办法吗?

java - 关于如何在 java 中为任何通用对象实现自定义哈希函数有什么想法吗?

java - Java 中重写 equals - getClass() 方法

css - 覆盖 highcharts-tooltip 中的表格单元格背景颜色

c - 大型静态数组是否会破坏堆栈?