コードに「key = null;」がある場合 instanceof のテストの直前に、例外が必ずスローされます。
その理由は、instantcof 演算子が、それがどのように宣言されているかではなく、指されているオブジェクトの型の参照をチェックするためです。
この簡単な例を試してみて、それに応じてコメントを削除して違いを確認できます。
public static void main(String[] args) {
//Object obj = new Integer(9);
Object obj = null;
if (!(obj instanceof Integer))
System.out.println("Not Integer.");
else
System.out.println("Is Integer");
}
また、ここで詳細を確認できます。
http://download.oracle.com/javase/tutorial/java/nutsandbolts/op2.html
それが役に立てば幸い :)
Java Generics の完全な例:
class GenTest<Key extends Integer, Value>{
Key key;
Value val;
GenTest(Key key, Value val){
this.key = key;
this.val = val;
System.out.println("Key: " + key + " Value: " + val);
}
}
public class GenericRecap {
public static void main(String[] args) {
//Object obj = new Integer(9);
Object obj = null;
if (!(obj instanceof Integer))
System.out.println("Not Integer.");
else
System.out.println("Is Integer");
new GenTest<Integer, String>(9, "nine");
//new GenTest<String, String>("funny", "nine"); // In-Error
}
}
また、'Key extends Integer' を使用すると、Integer をサブクラス化しないパスを渡すと、実行時に例外がスローされることに注意してください。さらに、それをチェックする IDE を使用している場合は、GenTest クラスの「境界内にない型」としてフラグが立てられます。
float と Integer はすべて Number から継承します。したがって、「Number を拡張」してから、コードでの使用方法に応じて「instanceof Integer」または「instanceof Float」をチェックできます。
それが役立つことを願っています:)乾杯!