Conflito de nome Java Generics, método não substituído corretamente
Vi perguntas diferentes sobre isso, mas ainda acho esse tópico muito confuso.
Tudo o que eu quero fazer é ter uma classe abstrata que implemente uma interface e uma classe estendendo essa classe abstrata para que a classe difícil precise implementargetKommune()
esetKommune(Kommune kommune)
, mas não o outro método, porque isso está na classe abstrata.
Eu tenho a seguinte interface.
public interface KommuneFilter {
<E extends AbstractKommune<?>> void addKommuneFromCurrentUser(E e);
Kommune getKommune();
void setKommune(Kommune kommune);
}
E essa classe abstrata
public abstract class AbstractKommune<E extends AbstractKommune<?>> implements KommuneFilter {
@PrePersist
void addKommuneFromCurrentUser(E e) {
Kommune k = e.getKommune();
}
}
E eu quero usá-lo assim
public class Person extends AbstractKommune<Person> {
private Kommune kommune;
public void setKommune(Kommune kommune) {this.kommune=kommune;}
public Kommune getKommune() {return kommune;}
}
No entanto, eu recebo
Name clash: The method of has the same erasure of type but does not override it
Por que não é substituído corretamente?
ATUALIZAR
Graças a @Bozho, a solução é 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>