instanceof - 不兼容的条件操作数类型
-
23-09-2019 - |
题
以下编译良好:
Object o = new Object();
System.out.println(o instanceof Cloneable);
但这并没有:
String s = new String();
System.out.println(s instanceof Cloneable);
抛出编译器错误。
问题是什么?
解决方案
您的问题的一个更明显的体现如下:
if ("foo" instanceof Number)
// "Incompatible conditional operand types String and Number"
这在中指定 JLS 15.20.2 类型比较运算符 instanceof
:
RelationalExpression: RelationalExpression instanceof ReferenceType
如果演员阵容 关系表达式 到 参考类型 将被视为编译时错误而被拒绝,然后
instanceof
关系表达式同样会产生编译时错误。在这种情况下,结果是instanceof
表达式永远不可能是真的。
也就是说,由于此转换表达式会生成编译时错误:
(Number) "foo"
这个表达式也必须如此:
("foo" instanceof Number)
你的情况有点微妙,但原理是一样的:
String
是最后一堂课String
不执行Cloneable
- 因此你不能这样做
(Cloneable) aString
- 因此你也不能这样做
aString instanceof Cloneable
其他提示
有一个相关的问题,我最近遇到(并促使我这个页面之前,我想通了什么事情)是Eclipse环境可以用“的instanceof”表达错误地报告“不兼容的条件操作数类型”由于对的“的instanceof”右边的类型缺少“进口”的语句。我花了一段时间试图找出如何在问题的类型也可能会被搞清楚的是缺少进口是造成整个问题之前不兼容。希望这一信息可以节省某人一段时间。
在编译器知道String
是一个final类和不实现Cloneable
。因此,没有字符串的实例可以的曾经的是Cloneable
的一个实例。它阻止你以为你已经有了一个有意义的测试时,实际上它总是会打印出“假”。
不隶属于 StackOverflow