Java Génériques conflit de nom, la méthode n'est pas correctement remplacée

J'ai vu des différentes questions à ce sujet, mais je trouve ce sujet pour être très déroutant.

Tout ce que je veux, c'est avoir une classe abstraite qui implémente une interface, et ont une classe étendant cette classe abstraite, de sorte que l'unité de la classe doit implémenter getKommune() et setKommune(Kommune kommune), mais pas dans l'autre méthode, parce que c'est dans la classe abstraite.

J'ai l'interface suivante.

public interface KommuneFilter {

    <E extends AbstractKommune<?>> void addKommuneFromCurrentUser(E e);

    Kommune getKommune();

    void setKommune(Kommune kommune);
}

Et cette classe Abstraite

public abstract class AbstractKommune<E extends AbstractKommune<?>> implements KommuneFilter {
    @PrePersist
    void addKommuneFromCurrentUser(E e) {
            Kommune k = e.getKommune();
    }
}

Et je veux l'utiliser comme ceci

    public class Person extends AbstractKommune<Person> {
        private Kommune kommune;             
        public void setKommune(Kommune kommune) {this.kommune=kommune;}
        public Kommune getKommune() {return kommune;}
    }

Cependant, je reçois

conflit de Nom: La méthode de a le même effacement de type, mais ne remplace pas, il

Pourquoi n'est-il pas correctement remplacée?

Mise à JOUR

Grâce à @Bozho, la solution est: est-ce

public interface KommuneFilter<E extends AbstractKommune<?>> {
    public void addKommuneFromCurrentUser(E e);
}

public abstract class AbstractKommune<E extends AbstractKommune<?>> implements KommuneFilter<E> 

public class Person extends AbstractKommune<Person>

OriginalL'auteur Shervin Asgari | 2010-03-30