jav*_*eek 54 java instanceof cloneable
以下编译正常:
Object o = new Object();
System.out.println(o instanceof Cloneable);
Run Code Online (Sandbox Code Playgroud)
但这不是:
String s = new String();
System.out.println(s instanceof Cloneable);
Run Code Online (Sandbox Code Playgroud)
抛出编译器错误.
问题是什么?
小智 153
我最近遇到的一个相关问题(在我弄清楚发生了什么之前让我进入了这个页面)是Eclipse环境可以错误地在'instanceof'表达式中报告"不兼容的条件操作数类型"缺少'instanceof'右侧类型的'import'语句.我花了一些时间试图找出问题中的类型可能是不兼容的,然后才发现丢失的导入导致了整个问题.希望这些信息能节省一些时间.
pol*_*nts 53
更明显地解决您的问题如下:
if ("foo" instanceof Number)
// "Incompatible conditional operand types String and Number"
Run Code Online (Sandbox Code Playgroud)
这在JLS 15.20.2类型比较运算符中instanceof指定:
Run Code Online (Sandbox Code Playgroud)RelationalExpression: RelationalExpression instanceof ReferenceType如果将RelationalExpression转换为ReferenceType将作为编译时错误被拒绝,则
instanceof关系表达式同样会产生编译时错误.在这种情况下,instanceof表达式的结果永远不会成立.
也就是说,因为此强制转换表达式会生成编译时错误:
(Number) "foo"
Run Code Online (Sandbox Code Playgroud)
所以这个表达必须:
("foo" instanceof Number)
Run Code Online (Sandbox Code Playgroud)
你的情况有点微妙,但原理是一样的:
String 是最后一堂课String 没有实现 Cloneable(Cloneable) aStringaString instanceof CloneableJon*_*eet 29
编译器知道这String是一个最终类并且没有实现Cloneable.因此,String的任何实例都不能成为Cloneable.它阻止你认为你有一个有意义的测试,实际上它总是打印"假".
| 归档时间: |
|
| 查看次数: |
41938 次 |
| 最近记录: |