Java: la substitution d'une sous-classe/sous-type d'un paramètre lors de l'overiding une méthode?

J'ai donc demandé à cette question avant, mais j'ai eu une erreur dans le code que la plupart des personnes ont ramassé sur, plutôt que le problème lui-même.

De toute façon, je suis en train de remplacer une méthode d'interface dans une classe. Cependant, je veux que le type du paramètre dans la méthode de remplacement d'une sous-classe du type du paramètre tel que défini dans la méthode surchargée.

L'interface est:

public interface Observer {
 public void update(ComponentUpdateEvent updateEvent) throws Exception;
}

Alors que la classe qui remplace cette méthode est:

public class ConsoleDrawer extends Drawer {

//...

 @Override
 public void update(ConsoleUpdateEvent updateEvent) throws Exception {
  if (this.componentType != updateEvent.getComponentType()) {
   throw new Exception("ComponentType Mismatch.");
  }
  else {
   messages = updateEvent.getComponentState(); 
  }
 }

//...

}

ConsoleUpdateEvent est une sous-classe de ComponentUpdateEvent.

Maintenant, je pourrais juste avoir la méthode update() dans ConsoleDrawer prendre un ComponentUpdateEvent en tant que paramètre et ensuite la convertir en une ConsoleUpdateEvent mais je suis à la recherche d'un peu plus élégant solution si possible. Anyhelp serait appréciée. Merci.

Je ne crois pas que ce soit possible car il va à l'encontre du principe d'une interface (c'est à dire les Classes qui implémentent une interface correspondent exactement à celles de toutes les signatures de méthode spécifiée par l'interface). Cependant, je vais regarder cette question, car je suis très curieux de voir si quelqu'un d'autre va me prouver le contraire.

OriginalL'auteur carnun | 2010-12-11