2015-12-01 4 views
0

У меня есть параметр Class<? extends JsonAPIDataObject> responseClass, и когда я пробую это if(responseClass instanceof ThisClass), где ThisClass реализует JsonAPIDataObject, он продолжает терпеть неудачу, говоря несовместимые типы?instanceof не работает, но isInstance() и isAssignableFrom() работает?

редактировать:

MyClass.class.isAssignableFrom(responseClass.getClass()) 
MyClass.class.isInstance(responseClass.getClass()) 

и не работают, я пытался без .getClass().

+1

Показать код. Только с описанием, которое вы предоставляете, невозможно точно определить проблему. – fge

+2

'instanceof' не подходит для использования с отражающими объектами C' Class'. –

ответ

4

x instanceof Y только компилируется, если тип времени компиляции x совместим с Y. Например, приведенный ниже код не компилируется, потому что String является Number.

String str = "Foo"; 
System.out.println(str instanceof Number); 

В вашем случае, responseClass является Class, не ThisClass так

responseClass instanceof Class 

компилирует и дает true, в то время как

responseClass instanceof ThisClass 

не компилируется. Вы должны использовать isInstance.

+1

спасибо, я буду использовать isInstance – gallly

+0

На самом деле я не могу заставить его работать с isInstance или isAssignableFrom. Я попробовал MyClass.class.isAssignableFrom (responseClass.getClass()) и несколько других вариантов, только == работает для меня ... – gallly

+0

Что вы пытаетесь сделать? Вы пытаетесь найти, является ли класс, представленный 'responseClass' подклассом« ThisClass »или суперклассом? –

Смежные вопросы