Я очень смущен...
У меня есть класс, который непосредственно реализует интерфейс:
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:
Определяет, является ли класс или интерфейсом, представленным этим объектом класса, тем же, что или суперкласс или суперповерхность , представляемый класс или интерфейс по указанному параметру класса.
Должен ли я всегда быть в состоянии применить объект к интерфейсу, который реализует его класс?
Спасибо.