Конфликт имен в Java Generics, метод не корректно переопределен
Я видел разные вопросы по этому поводу, но я все еще нахожу эту тему очень запутанной.
Все, что я хочу сделать, это иметь абстрактный класс, который реализует интерфейс, и иметь класс, расширяющий этот абстрактный класс, так что жесткий класс должен реализоватьgetKommune()
а такжеsetKommune(Kommune kommune)
, но не другой метод, потому что это в абстрактном классе.
У меня есть следующий интерфейс.
public interface KommuneFilter {
<E extends AbstractKommune<?>> void addKommuneFromCurrentUser(E e);
Kommune getKommune();
void setKommune(Kommune kommune);
}
И этот абстрактный класс
public abstract class AbstractKommune<E extends AbstractKommune<?>> implements KommuneFilter {
@PrePersist
void addKommuneFromCurrentUser(E e) {
Kommune k = e.getKommune();
}
}
И я хочу использовать это так
public class Person extends AbstractKommune<Person> {
private Kommune kommune;
public void setKommune(Kommune kommune) {this.kommune=kommune;}
public Kommune getKommune() {return kommune;}
}
Тем не менее, я получаю
Name clash: The method of has the same erasure of type but does not override it
Почему это не корректно переопределено?
ОБНОВИТЬ
Благодаря @ Божо, решение таково:
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>