[英]instanceof with custom/core classes
為什么我可以使用instanceof
針對我的自定義界面測試我的自定義類,我無法對java核心類做同樣的事情?
interface A{}
class B{}
public class Tmp {
public static void main(String [] args) {
String s = "";
Integer i = 1;
B b = new B();
System.out.println(s instanceof A); //1
System.out.println(i instanceof A); //2
System.out.println(b instanceof A); //3
}
}
第1行和第2行不會編譯。 第3行將編譯(並打印為false
)。 有什么不同?
如果編譯器可以檢測到instanceof
操作永遠不會為true,則會生成編譯器錯誤。 它通過遵循與投射相同的規則來確定這一點。 具體規則在JLS的第15.20.2節中描述:
如果將RelationalExpression轉換為ReferenceType將作為編譯時錯誤被拒絕,則關系表達式的實例同樣會產生編譯時錯誤。 在這種情況下,instanceof表達式的結果永遠不會成立。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.