繁体   English   中英

通用接口实现不起作用

[英]Generic interface implementation not working

我的界面是:

public interface SalesForceRecordService<T extends SalesForceRecord> {

    T update(T record) throws IOException;
}

我的实现类是:

public class SalesForceRecordServiceImpl<T extends SalesforceRecordImpl> implements SalesforceRecordService {

  @Override
    public T update(T record) throws IOException {
        return null;
    }

}

@Override给出错误,方法不会从其超类覆盖方法。

我无法理解问题所在。

您必须将类型传递给超类,因为它需要一个。 如果您希望SalesForceRecordServiceImpl也像您发布的一样通用,则将T传递给SalesForceRecordService

尝试这个:

public class SalesForceRecordServiceImpl<T extends SalesForceRecordImpl>
        implements SalesForceRecordService<T> {

    @Override
    public T update(T record) throws IOException {
        return null;
    }
}

同样以其名称判断, SalesForceRecordImpl在我看来像是一个具体的实现,所以也许您只想要这样:

public class SalesForceRecordServiceImpl
        implements SalesForceRecordService<SalesForceRecordImpl> {

    @Override
    public SalesForceRecordImpl update(SalesForceRecordImpl record)
            throws IOException {

        return null;
    }
}

首先,在实现类上,还应该将类型模板传递到接口描述中。 否则,编译器无法检查SalesForceRecordServiceImpl上提供的T是否与SalesforceRecordService兼容。

public class SalesForceRecordServiceImpl<T extends SalesforceRecordImpl> 
  implements SalesforceRecordService<T> {
   ...

(我假设SalesforceRecordImpl是SalesforceRecord的子类型)

其次,强制方法使用@Overrides注释实现接口,该方法仅从Java 6起可用,因此,如果您使用的是Java 5,则会出现编译器错误

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM