• 締切済み

Java のinstanceof 演算子について

Sun Java2 認定ガイドの168 ページに次のコードを前提とした場合のinstanceof テスト結果が示されている。 このようなテスト結果が得られるプログラムのコーディングを教えてください。 *前提とするコード interface Face { } class Bar implements Face { } class Foo extends Bar { } *instanceof 演算子のオペランドとテスト結果(表) 1番目のオペランド  instanceof オペランド      テスト結果 null        すべてのclass型又はinterface型    false Fooインスタンス   Foo、Bar、Face、Object        true Barインスタンス   Bar、Face、Object           true Barインスタンス   Foo                  false Foo[]        Foo、Bar、Face            false Foo[]        Object                true Foo[1]        Foo、Bar、Face、Object        true 以上です。例えば、2行目のFooインスタンスとBarの比較は次のようにやればよいと思いますが、Foo[]やFoo[1]についてはどうコーディングすればよいのでしょうか? Foo f = new Foo(); boolean b = f instanceof Bar; // bをプリントする     

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

Foo[] fooArray = new Foo[5]; System.out.println("Foo[] instanceof Face\t" +(fooArray instanceof Face)); のように書いた場合、コンパイルエラーになりコンパイルできませんでした。 (ちょっとまやかしのようには思えますが、コンパイルできないことにはしょうがない) しかし、次のようには書けました。 System.out.println("Foo[] instanceof Object\t" +(fooArray instanceof Object)); System.out.println("Foo[] instanceof Face\t" +((Object)fooArray instanceof Face)); System.out.println("Foo[] instanceof Bar\t" +((Object)fooArray instanceof Bar)); System.out.println("Foo[] instanceof Foo\t" +((Object)fooArray instanceof Foo)); Foo[1] については、 Foo[] fooArray = new Foo[5]; fooArray[1] = new Foo(); のようにして System.out.println("Foo[1] instanceof Object\t" +(fooArray[1] instanceof Object)); とすればいいように思いますが、 これは、もちろん Foo インスタンスですからFooインスタンスの結果と同じになります。

KuroGin
質問者

お礼

BLUEPIXY 殿 回答ありがとうございました。 早速コーディングして、テストしたいと思います。 その上で問題が発生したら、またよろしくお願いします。                        KuroGin 

関連するQ&A