class A
{
boolean foo() {
return true;
}
}
为什么以下给出语法错误?
未为类型定义方法
if(a instanceOf A && a.foo()) {
.....
}
这很好-
if(a instanceOf A && ((A)a).foo()) {
.....
}
答案 0 :(得分:1)
对于人类来说,很明显a
的类型为A
,因为进行了instanceof
检查。编译器虽然不能那样工作,所以您仍然需要将a
强制转换为A
。
答案 1 :(得分:1)
以前,instanceof
operator仅返回true
或false
,而对其操作数的类型没有影响。
As of Java 14, instanceof
supports pattern matching(或查看规格预览here)。您可以声明一个新的内联变量,当且仅当检查成功时,该内联变量才是instanceof
的目标类型。
例如,您的代码看起来像
if(a instanceof A actual && actual.foo()) {
// ...
}