Я очень запутался ...
У меня есть класс, который непосредственно реализует интерфейс:
public class Device implements AutocompleteResult
{...}
Вот доказательство того, что я смотрю на правильные переменные:
Object match = ...;
log.debug(match.getClass()); // Outputs 'Device'
log.debug(match.getClass().getInterfaces()[0]); // Outputs 'AutocompleteResult'
Тем не менее, когда я пытаюсь привести экземпляр класса к интерфейсу:
AutocompleteResult result = (AutocompleteResult) match;
, я получаю ClassCastException!
ClassCastException: Device cannot be cast to AutocompleteResult
Кроме того, isAssignableFrom
возвращает false, и я не уверен, почему:
log.debug(AutocompleteResult.class.isAssignableFrom(Device.class));
из doc :
Определяет, является ли класс илиИнтерфейс , представленный этим объектом Class, либо совпадает, либо является суперинтерфейсом, либо суперинтерфейсом класса или интерфейса, представленных указанным параметром Class.
Разве я не должен всегда иметь возможность приводить объект к интерфейсу, который реализует его класс?
Спасибо.