Choque de nombres genéricos de Java, método no anulado correctamente
He visto diferentes preguntas con respecto a esto, pero todavía encuentro este tema muy confuso.
Todo lo que quiero hacer es tener una clase abstracta que implemente una interfaz, y tener una clase que extienda esta clase abstracta para que la clase difícil necesite implementargetKommune()
ysetKommune(Kommune kommune)
, pero no el otro método, porque eso está en la clase abstracta.
Tengo la siguiente interfaz.
public interface KommuneFilter {
<E extends AbstractKommune<?>> void addKommuneFromCurrentUser(E e);
Kommune getKommune();
void setKommune(Kommune kommune);
}
Y esta clase abstracta
public abstract class AbstractKommune<E extends AbstractKommune<?>> implements KommuneFilter {
@PrePersist
void addKommuneFromCurrentUser(E e) {
Kommune k = e.getKommune();
}
}
Y quiero usarlo así
public class Person extends AbstractKommune<Person> {
private Kommune kommune;
public void setKommune(Kommune kommune) {this.kommune=kommune;}
public Kommune getKommune() {return kommune;}
}
Sin embargo, me sale
Name clash: The method of has the same erasure of type but does not override it
¿Por qué no se anula correctamente?
ACTUALIZAR
Gracias a @Bozho, la solución es esta:
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>