"instanceof" 检查抛出 CompileTimeError "cannot safely cast"
"instanceof" check throws CompileTimeError "cannot safely cast"
我有这个内部 class 节点,我在检查 instanceof 时遇到了这个奇怪的错误。我尝试 google,这是为什么,但它只显示“不可转换类型”错误,而事实并非如此。我还尝试将 Node 设为静态 class,但这也无济于事。我对此有点困惑,因此非常感谢您的帮助。提前致谢。
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);
}
}
}
我认为问题在于,您在参数化 class 中使用了内部 class。并且 instanceof 检查不知道应该为哪个参数进行转换。
我有这个内部 class 节点,我在检查 instanceof 时遇到了这个奇怪的错误。我尝试 google,这是为什么,但它只显示“不可转换类型”错误,而事实并非如此。我还尝试将 Node 设为静态 class,但这也无济于事。我对此有点困惑,因此非常感谢您的帮助。提前致谢。
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);
}
}
}
我认为问题在于,您在参数化 class 中使用了内部 class。并且 instanceof 检查不知道应该为哪个参数进行转换。