io sono molto confuso ...non può lanciare a interfaccia implementata
ho una classe che implementa l'interfaccia direttamente:
public class Device implements AutocompleteResult
{...}
Ecco la prova che sto guardando in alto a destra variabili:
Object match = ...;
log.debug(match.getClass()); // Outputs 'Device'
log.debug(match.getClass().getInterfaces()[0]); // Outputs 'AutocompleteResult'
Eppure, quando provo a lanciare un'istanza della classe per l'interfaccia:
AutocompleteResult result = (AutocompleteResult) match;
Ricevo una ClasseCastException!
ClassCastException: Device cannot be cast to AutocompleteResult
Inoltre, isAssignableFrom
restituisce false e non sono sicuro perché:
log.debug(AutocompleteResult.class.isAssignableFrom(Device.class));
dal doc:
determina se il classe o interfaccia rappresentato da questa classe l'oggetto è o uguale a, oppure è una superclasse o superinterf asso di, la classe o l'interfaccia rappresentata dal parametro Class specificato.
Non dovrei essere sempre in grado di trasmettere un oggetto a un'interfaccia le sue implementazioni di classe?
Grazie.
Sì, si dovrebbe! (e non dovresti nemmeno aver bisogno del cast esplicito.) Pubblica un codice di esempio autosufficiente che mostri il problema. –