Jestem bardzo mylić ...nie może rzutować na wdrożonego interfejsu
Mam klasy, która implementuje interfejs bezpośrednio:
public class Device implements AutocompleteResult
{...}
Oto dowód, że patrzę w prawo zmienne:
Object match = ...;
log.debug(match.getClass()); // Outputs 'Device'
log.debug(match.getClass().getInterfaces()[0]); // Outputs 'AutocompleteResult'
Jednak gdy próbuję rzucić instancję klasy interfejsu:
AutocompleteResult result = (AutocompleteResult) match;
Otrzymuję wyjątek ClassCastException!
ClassCastException: Device cannot be cast to AutocompleteResult
Również isAssignableFrom
powraca fałszywa i nie jestem pewien, dlaczego:
log.debug(AutocompleteResult.class.isAssignableFrom(Device.class));
z doc:
Określa, czy klasa lub interfejs przedstawiciele tej klasy obiekt jest albo taki sam, jak superklasa, albo superinterf as, klasa lub interfejs reprezentowany przez określony parametr klasy.
Czy nie powinienem zawsze móc rzucić obiekt na interfejs, który implementuje jego klasa?
Dzięki.
Tak, powinieneś! (i nie powinieneś nawet potrzebować jawnej obsady). Proszę napisać samodzielny przykładowy kod demonstrujący problem. –