- 締切済み
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をプリントする
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
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インスタンスの結果と同じになります。
お礼
BLUEPIXY 殿 回答ありがとうございました。 早速コーディングして、テストしたいと思います。 その上で問題が発生したら、またよろしくお願いします。 KuroGin