覆盖 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
,因为这已经在执行您要重新实现的内容了。
我必须创建一个 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
,因为这已经在执行您要重新实现的内容了。