Нет, из-за стирания типа . Экземпляр MyClass<T>
на самом деле не знает, что такое T
.
Вам нужно иметь экземпляр Class<T>
. Тогда вы можете использовать метод isInstance
. Один из способов сделать это - указать это в конструкторе:
class MyClass<T>
{
private Class<T> clazz;
MyClass(Class<T> clazz)
{
this.clazz = clazz;
}
// Now you can use clazz to check for instances, create new instances ect.
}
Во втором случае проблема заключается в первом операнде, а не во втором. Само примитивное значение не является экземпляром Integer
; коробочная версия:
Object obj = 2;
boolean b2 = obj instanceof Integer;
Всякий раз, когда у вас есть подлинное примитивное значение, вы уже знаете тип, поэтому выполнение динамической проверки типов не имеет особого смысла.