J'ai l'interface suivante:classe anonyme mise en œuvre d'une interface
public interface MessageFactory<T extends Message> {
public T create(Session session);
}
quand je définir la classe comme ça, Eclipse me donne l'erreur dans le commentaire ci-dessous sur cette ligne:
public abstract class MessageType<T extends Message> implements MessageFactory<T>{
public static final MessageType<ObjectMessage> PLAYER_REGISTER = new MessageType<ObjectMessage>() {
@Override
public ObjectMessage create(Session session) { //Error, remove @Override annotation
//impl
}
};
private MessageType(){ }
}
Mais si je copie et colle la méthode create
de l'interface dans la classe en tant que méthode abstraite, l'erreur disparaît:
public abstract class MessageType<T extends Message> implements MessageFactory<T>{
public static final MessageType<ObjectMessage> PLAYER_REGISTER = new MessageType<ObjectMessage>() {
@Override
public ObjectMessage create(Session session) { //Fine
//impl
}
};
public abstract T create(Session session);
private MessageType(){ }
}
Quel est le problème avec les classes anonymes implémentant des interfaces?
@TJCrowder mais dans le premier extrait 'abstraite MessageType' de classe doit hériter de toute façon' T créer (session de session) 'méthode d'interface implémentée, n'est-ce pas? – Yura
@ T.J.Crowder Pas clair. La classe anonyme étend le MessageType qui à son tour implémente l'interface. Par conséquent, la classe anonyme implémente l'interface. –
@ T.J.Crowder __Vous n'implémentez pas l'interface, vous sous-classez MessageType__ Si nous sous-classons un type implémentant une interface, la sous-classe implémentera également l'interface. Donc, nous avons juste besoin de remplacer ses méthodes. Je ne comprends vraiment pas le problème dans mon exemple. –