Java 泛型:从实现接口的抽象类继承
我有以下界面:Java 泛型:从实现接口的抽象类继承,java,inheritance,interface,abstract-class,Java,Inheritance,Interface,Abstract Class,我有以下界面: public interface SingleRecordInterface<T> { public void insert(T object); } 最后,SpecificEntryBean定义为: public class SpecificEntryBean extends AbstractEntryBean { } 我有以下错误: 类型SpecificEntry必须实现继承的抽象方法SingleRecordInterface.insert(Abstr
public interface SingleRecordInterface<T> {
public void insert(T object);
}
最后,SpecificEntryBean定义为:
public class SpecificEntryBean extends AbstractEntryBean {
}
我有以下错误:
类型SpecificEntry必须实现继承的抽象方法SingleRecordInterface.insert(AbstractEntryBean)
我不理解这个错误的原因,因为SpecificEntryBean扩展了AbstractEntryBean。如何修复此错误?您还需要将抽象类设置为泛型:
public abstract class AbstractEntry<T extends AbstractEntryBean> implements SingleRecordInterface<T> {
}
公共抽象类AbstractEntry实现SingleRecordInterface{
}
那么对于你的具体课程:
public class SpecificEntry extends AbstractEntry {
public void insert(SpecificEntryBean entry) {
// stuff
}
}
public class SpecificEntry extends AbstractEntry<SpecificEntryBean> {
}
公共类SpecificEntry扩展了AbstractEntry{
}
更改为以下内容:
public abstract class AbstractEntry<EB extends AbstractEntryBean> implements SingleRecordInterface<EB> {
}
公共抽象类AbstractEntry实现SingleRecordInterface{
}
及
公共类SpecificEntry扩展了AbstractEntry{
公共作废插入(SpecificEntryBean条目){
//东西
}
}
公共抽象类AbstractEntry实现SingleRecordInterface{
}
公共类SpecificEntry扩展了AbstractEntry{
公共作废插入(SpecificEntryBean条目){
//东西
}
}
问题在于您的
public abstract class AbstractEntry implements SingleRecordInterface<AbstractEntryBean> {}
因为Java需要完全相同的方法签名来覆盖给定的方法
您可以按照其他人的建议为类提供类型参数,也可以按照如下方式提供桥接(重载)方法:
//overloading
public void insert(SpecificBean object){
insert((AbstractEntryBean) object);
}
这是我在stackoverflow中最喜欢的答案
public abstract class AbstractEntry<T extends AbstractEntryBean> implements SingleRecordInterface<T> {
}
public class SpecificEntry extends AbstractEntry<SpecificEntryBean> {
public void insert(SpecificEntryBean entry) {
// stuff
}
}
public abstract class AbstractEntry implements SingleRecordInterface<AbstractEntryBean> {}
@Override
public void insert(AbstractEntryBean object) {
// TODO Auto-generated method stub
}
//overloading
public void insert(SpecificBean object){
insert((AbstractEntryBean) object);
}