【Java入門】instanceof演算子で型を判定(クラス/インターフェース)オオイシ2018/1/172019/4/16こんにちは!システムエンジニアのオオイシです。Javaにはその変数は◯◯クラスのインスタンスか?を判定するときに便利なinstanceof演算子があります。この記事ではinstanceof演算子とは?instanceof演算子の使い方を知りたいデータ型を判定する方法を教えて欲しいというinstanceof演算子の基本的な解説からサブクラスがスーパークラスを継承しているかを判定する方法インターフェースを実装しているかを判定する方法instanceof演算子で左辺がnullの場合についても解説していきます。◯◯クラスのインスタンスか?◯◯クラスのサブクラスのインスタンスか?◯◯インターフェース実装したクラスのインスタンスか?◯◯インターフェース実装したサブクラスのインスタンスか?を判定します。instanceof演算子は次のように記述します。戻り値はtrueかfalseを返します。変数がinstanceofの右辺で指定したクラスのインスタンスである変数がinstanceofの右辺で指定したインターフェースを実装したクラスのインスタンスであるの2点です。注意してほしいのは、instanceof演算子が使えるのは参照型の変数のみであるということです。int型やboolean型などのプリミティブ型には使えません。使用した場合には、コンパイルエラーになります。instanceofの名前が表すとおり○○クラスのインスタンスか?を判定するための演算子だからです。プリミティブ型はインスタンスを作成できないためinstanceof演算子は使えないと覚えておいてください。instanceof演算子の実践的な使い方としては、例えば、if文を使ってこの変数は○○クラスへダウンキャスト可能か?を判定するときなどに利用します。ダウンキャストとは、サブクラスへ型変換することで、ダウンキャストができない場合には「java.lang.ClassCastException」という例外が発生します。そのため、ダウンキャストができるかどうかを事前にチェックするときに使用します。キャストについては、こちらで詳しく説明していますので、ぜひ参考にしてください。2019年5月30日instanceof演算子の使い方ここではサンプルコードを交えてinstanceof演算子の使い方を解説します。データ型を判定する方法instanceof演算子はその変数は◯◯クラスのインスタンスか?を判定するときに使用します。instanceof演算子を使用して、Object型の変数がStringクラスのインスタンスであるかを判定する方法を次のプログラムで確認しましょう。}}実行結果:truefalse変数objはStringクラスのインスタンスですが、Integerクラスのインスタンスではないことが確認できました。1点、実践的な例としてStringクラスへダウンキャストが可能な場合はキャスト処理をするサンプルコードを紹介します。{System.out.println("変数objはString以外の型です。");}}}実行結果:変数objの値は「samurai」です。このサンプルコードは、変数objの型が何なのかわからないので、String型にキャストできるかをinstanceof演算子で確認してからキャストしています。サブクラスがスーパークラスを継承しているかを判定する方法instanceof演算子を使って、サブクラスがスーパークラスを継承しているのかどうかを判定することができます。画像:サブクラスとスーパークラスの継承についての解説図instanceof演算子で指定するクラスが、サブクラスとスーパークラスどちらでもtrueが返ります。サンプルコードで確認してみましょう。SuperClass{}実行結果:truetrueこのプログラムでは、変数subが指定したスーパークラスのサブクラスのインスタンスかどうかを判定しています。このようにして、サブクラスがスーパークラスを継承しているかを判定することができました。クラスの継承方法の詳細については、こちらの記事で詳しく解説しているので、ぜひ確認してみてください。2018年10月26日インターフェースを実装しているかを判定する方法instanceof演算子を使って、インターフェースを実装しているのかどうかを判定することができます。インターフェース名と記述しましょう。instanceof演算子を使って、インターフェースを実装しているのかどうかを判定する方法を、次のサンプルコードで確認してみましょう。{}実行結果:truetrueこのプログラムでは、変数subが指定したインターフェースを実装したクラスのインスタンスであるかどうかを判定しています。このようにして、インタフェースを実装しているのかどうかを判定することができました。インターフェース詳細については、こちらの記事で詳しく解説しているので、ぜひ確認してみてください。2019年4月26日instanceof演算子で左辺がnullの場合instanceof演算子の左辺がnullの場合はどのように判定されるでしょうか?nullを参照する変数はインスタンスを参照していないという状態です。そのため、instanceof演算子で左辺がnullの場合は、結果が常にfalseになります。Objectクラスのインスタンスであるかどうかを判定しています。Objectクラスは全てのクラスの親クラスであるため、instanceof演算子を使った場合に通常はすべてtrueを返します。左辺がnullの場合にはfalseを返します。まとめいかかでしたか?今回はinstanceof演算子の使い方について説明しました。instanceof演算子は、その変数は◯◯クラスのインスタンスか?その変数は◯◯インターフェースを実装したのインスタンスか?を判定するために使用します。instanceof演算子は、インスタンス変数のクラスによって処理を切り替えたい場合に有効ですのでぜひ活用してみてください。instanceof演算子の使い方を忘れてしまったらこの記事を確認してください!TweetPocket無料でSEからWebエンジニアへ転職しませんか?侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、システムエンジニアという職業だけどコードが書けない事務作業が多くスキルがないため将来が不安スクールに通うと完全未経験者と同じスタートになるからレベルが合わないという、すでに知識があるSEならではのお悩みがあることに気づきました。弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。こちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。プログラミング、システムアーキテクトからマネジメントに到るまでなんでも食べます。