我已经看到了不同的问题,但我仍然觉得这个话题非常令人困惑.
所有我想做的事,是有实现接口的抽象类,并具有扩展该抽象类的类,使硬盘类需要实现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)
我建议使接口通用,而不仅仅是它的方法:
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)
| 归档时间: |
|
| 查看次数: |
15589 次 |
| 最近记录: |