【Java】型判定をするinstanceof

2018年3月11日

本稿ではinstanceof演算子を使用し、型判定をする方法を説明します。

instaceof演算子は変数の型が何なのかを調べるための演算子です。

instanceofを使えば、実装しているインターフェースや継承しているクラスを調べることができます。

instanceofの利用

型比較したいときには「変数名 instanceof 型」と記述しましょう。

型が一致した場合は、trueを返します。

変数名は必ず左でなければなりません。左右逆での使用はできないんですね。

それではinstanceofでどんな結果が得られるのかを見てみましょう。

public class Test{
	public static void main(String[] args){
		Object ch = new Chara();
		System.out.println("new CharaはChara型ですか?:"+(ch instanceof Chara));
		System.out.println("new CharaはEnemy型ですか?:"+(ch instanceof Enemy));
		System.out.println("new CharaはBase型ですか?:"+(ch instanceof Base));
		System.out.println("new CharaはImpl型ですか?:"+(ch instanceof Impl));
		
		Object ch2 = new Enemy();
		System.out.println("new EnemyはChara型ですか?:"+(ch2 instanceof Chara));
		System.out.println("new EnemyはEnemy型ですか?:"+(ch2 instanceof Enemy));
		System.out.println("new EnemyはBase型ですか?:"+(ch2 instanceof Base));
		System.out.println("new EnemyはImpl型ですか?:"+(ch2 instanceof Impl));
	}
}
interface Impl{
}
class Base{
}
class Chara extends Base implements Impl{
}
class Enemy extends Base{
}
実行結果

new CharaはChara型ですか?:true
new CharaはEnemy型ですか?:false
new CharaはBase型ですか?:true
new CharaはImpl型ですか?:true
new EnemyはChara型ですか?:false
new EnemyはEnemy型ですか?:true
new EnemyはBase型ですか?:true
new EnemyはImpl型ですか?:false

instanceofをたくさん使用するような事態になることはなるべく避けましょう。

頻繁に使うということは、設計があまりよろしくないということが多いです。

Java

Posted by nompor