通用接口实现不起作用

时间:2014-11-12 06:13:05

标签: java generics inheritance

我的界面是:

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给出错误,方法不会覆盖其超类的方法。

我无法理解这是什么问题。

2 个答案:

答案 0 :(得分:2)

你必须将一个类型传递给超类,因为它需要一个。如果您希望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;
    }
}

答案 1 :(得分:0)

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

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

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

其次,强制方法使用@Overrides注释实现一个接口只能从java 6开始提供,所以如果你在java 5上,你会得到一个编译器错误