Если ваш код имеет «ключ = ноль;»прямо перед проверкой instanceof, исключение обязательно будет выдано.
Причина в том, что оператор instancof проверяет ссылку на тип объекта, на который указывает объект, а не на то, как он объявлен.
Вы можете попробовать этот простой пример и удалить комментариисоответственно, чтобы увидеть разницу:
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.
Floats и Integer все наследуются от Number.Таким образом, вы можете «расширить Number», а затем проверить «instanceof Integer» или «instanceof Float» в зависимости от того, как вы хотите использовать его в своем коде.
Надеюсь, это поможет :) Cheers!