"instanceof"检查会引发 CompileTimeError "cannot safely cast"



我有这个内部类Node,在instanceof检查中得到这个奇怪的错误。我试着谷歌一下,为什么会这样,但它只显示"不可转换类型"。错误,这不是错误。我还试着让Node成为一个静态类,但这也没有帮助。我对这个有点困惑,所以你的帮助将非常感激。提前谢谢。

import java.util.Objects;
public abstract class Graph<E> {
protected class Node {
E item;
protected Node(final E item) {
this.item = item;
}
@Override
public boolean equals(final Object o) {
if (this == o)
return true;
else if(item == null)
return false;
else if(o instanceof final Node node) //error: "java: java.lang.Object cannot be safely cast to Graph<E>.Node"
return item.equals(node.item);
return item.equals(o);
}
@Override
public int hashCode() {
return Objects.hash(item);
}
}
}

在阅读了一些答案后,我意识到我只是犯了一个愚蠢的错误,在这段代码中纠正了:

import java.util.Objects;
public abstract class Graph<E> {
protected class Node {
E item;
protected Node(final E item) {
this.item = item;
}
@Override
public boolean equals(final Object o) {
if (this == o)
return true;
else if(item == null)
return false;
else if(o instanceof final /* Error was not using a wildcard*/ Graph<?>.Node node) //also after some confusion this (final Node node) is a java 16 feature
return item.equals(node.item);
return item.equals(o);
}
@Override
public int hashCode() {
return Objects.hash(item);
}
}
}

我认为问题在于,您在参数化类中使用了内部类。而instanceof检查并不知道应该对哪个形参进行强制类型转换。

相关内容

  • 没有找到相关文章

最新更新