如果我尝试将instanceof运算符与错误的类一起使用,我会收到编译错误(“动物无法转换为字符串”),但使用接口时我不会收到编译时错误。
例如:在第 10 行中,我收到编译错误,因为 Animal 不是 String 的子类。但在第 14 行,即使 Animal 没有实现 List 接口,我也没有收到编译错误。
class Animal {
}
public class InstanceOf {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Animal a = new Animal();
if (a instanceof String ){ //line 10
System.out.println("True");
}
if (a instanceof List ){ //line 14
System.out.println("True");
}
}
}
a
永远不可能是 String 的实例,因此会出现编译错误。
a
可以是一个实例List
如果某个子类Animal
将实施List
接口,您可以将此类子类的实例分配给a
。因此编译器允许它。
来自JLS https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.20.2 :
如果 RelationalExpression 到 ReferenceType 的强制转换(第 15.16 节)将被视为编译时错误而被拒绝,则实例化关系表达式同样会产生编译时错误。在这种情况下,instanceof 表达式的结果永远不可能为真。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)