ne pouvez pas jeter à la mise en œuvre de l'interface

je suis très confus...

J'ai une classe qui implémente directement une interface:

public class Device implements AutocompleteResult
{...}

Ici est la preuve que je suis à la recherche sur le droit des variables:

Object match = ...;
log.debug(match.getClass()); //Outputs 'Device'
log.debug(match.getClass().getInterfaces()[0]); //Outputs 'AutocompleteResult'

Mais lorsque j'ai essayez de lancer une instance de la classe à l'interface:

AutocompleteResult result = (AutocompleteResult) match;

- Je obtenir une ClassCastException!

ClassCastException: Device cannot be cast to AutocompleteResult

Aussi, isAssignableFrom renvoie la valeur false et je ne sais pas pourquoi:

log.debug(AutocompleteResult.class.isAssignableFrom(Device.class));

de la doc:

Détermine si le classe ou interface représenté par cette Classe d'objet est soit la même ou une super-classe ou superinterface de, la classe ou l'interface représentée par la Classe spécifiée en paramètre.

Ne devrais-je pas toujours être en mesure de lancer un objet à une interface de sa classe implémente?

Grâce.

  • Oui, vous devriez! (et vous ne devriez même pas besoin de cast explicite.) Veuillez poster quelques autonome exemple de code qui illustre le problème.
InformationsquelleAutor pstanton | 2011-11-07