みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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をプリントする
  



 

投稿日時 - 2006-06-24 07:57:46

QNo.2234801

困ってます

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.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インスタンスの結果と同じになります。

投稿日時 - 2006-06-24 13:28:22

お礼

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

投稿日時 - 2006-06-27 20:56:57

あなたにオススメの質問