Java Generics名称冲突,方法未正确覆盖

She*_*ari 10 java generics

我已经看到了不同的问题,但我仍然觉得这个话题非常令人困惑.

所有我想做的事,是有实现接口的抽象类,并具有扩展该抽象类的类,使硬盘类需要实现getKommune()setKommune(Kommune kommune),而不是其他方法,因为这是在抽象类.

我有以下界面.

public interface KommuneFilter {

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

    Kommune getKommune();

    void setKommune(Kommune kommune);
}
Run Code Online (Sandbox Code Playgroud)

而这个抽象类

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

我希望像这样使用它

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

但是,我明白了

Name clash: The method of has the same erasure of type but does not override it

为什么不正确覆盖它?

更新

感谢@Bozho,解决方案是:

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>
Run Code Online (Sandbox Code Playgroud)

Boz*_*zho 6

我建议使接口通用,而不仅仅是它的方法:

interface KommuneFilter<E extends AbstractKommune<?>> { .. }
Run Code Online (Sandbox Code Playgroud)

然后

public abstract class AbstractKommune<E extends AbstractKommune<?>> 
     implements KommuneFilter<E> 
Run Code Online (Sandbox Code Playgroud)