我的界面是:
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
给出错误,方法不会覆盖其超类的方法。
我无法理解这是什么问题。
答案 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
public class SalesForceRecordServiceImpl<T extends SalesforceRecordImpl>
implements SalesforceRecordService<T> {
...
(我假设SalesforceRecordImpl是SalesforceRecord的子类型)
其次,强制方法使用@Overrides
注释实现一个接口只能从java 6开始提供,所以如果你在java 5上,你会得到一个编译器错误