誰でもJavaのinstanceof演算子を使って次のような動作を説明できますか?変数rの種類本家インタフェースのあるjavaのinstanceof演算子
Runnable r = new Thread();
はRunnableをし、instanceofは比較が
誰でもJavaのinstanceof演算子を使って次のような動作を説明できますか?変数rの種類本家インタフェースのあるjavaのinstanceof演算子
Runnable r = new Thread();
はRunnableをし、instanceofは比較が
String
クラスがfinal
で同じクラス階層に存在しないクラスで行われている - それができることを意味しています」サブクラス化される。また、Runnable
を実装していません。このすべてはコンパイル時に認識されています。したがって、コンパイルエラー。
例:
static class First {
}
static final class Second {
}
そしてより:
Runnable r = new Thread();
System.out.println(r instanceof First);
System.out.println(r instanceof Second);
コンパイラはSecond
は、このように、それはこのように、それはRunnable
を実装することはできません、どんなsub-classes
を持つことができない、final
であることを見ています。
String
クラスはfinal
であり、Runnable
インターフェイスを実装していません。したがって、r instanceof String
は、String
のサブクラス(Runnable
を実装することはできないため)を返すことはできません。そのため、コンパイラはそれを許可しません。一方
、そうr instanceof Vector
とr instanceof FileNotFoundException
は限りコンパイラが言うことができるようにtrueを返すことがあり、Vector
クラスのサブクラスまたはRunnable
インタフェースを実装するクラスFileNotFoundException
があるかもしれません。
これはJLS 15.20.2で覆われている:コンパイル時にエラーが、その後のinstanceof関係式は、同様に、コンパイル時に生成としてのReferenceTypeへの関係式のキャスト(§15.16)が拒否される場合
エラー。 このような状況では、instanceof式の結果はtrueになることはありません。
その他の点: 'String'は' Runnable'を実装しておらず、( 'final'なので)*サブクラス*を持つことはできません。 –
@ T.J.Crowderはい+1これは答えに編集して、より役に立つようにするのが良いでしょう。 –
@ErwinBolwidt:はい。私はモーリスにそれを残していた。しかし、すべてのことは、とにかく愚か者です、そう... –