Java 通用接口实现不工作
我的界面是:Java 通用接口实现不工作,java,generics,inheritance,Java,Generics,Inheritance,我的界面是: public interface SalesForceRecordService<T extends SalesForceRecord> { T update(T record) throws IOException; } 公共接口SalesForceRecordService{ T更新(T记录)抛出IOException; } 我的实施课程是: public class SalesForceRecordServiceImpl<T extends S
public interface SalesForceRecordService<T extends SalesForceRecord> {
T update(T record) throws IOException;
}
公共接口SalesForceRecordService{
T更新(T记录)抛出IOException;
}
我的实施课程是:
public class SalesForceRecordServiceImpl<T extends SalesforceRecordImpl> implements SalesforceRecordService {
@Override
public T update(T record) throws IOException {
return null;
}
}
公共类SalesForceRecordServiceImpl实现SalesforceRecordService{
@凌驾
公共T更新(T记录)引发IOException{
返回null;
}
}
@Override
给出错误,方法不从其超类重写方法
我无法理解问题出在哪里。您必须向超类传递一个类型,因为它需要一个类型。如果您希望您的
salesforcerecordserviceinpl
也像您发布的那样是通用的,那么将T
传递给SalesForceRecordService
试试这个:
public class SalesForceRecordServiceImpl<T extends SalesForceRecordImpl>
implements SalesForceRecordService<T> {
@Override
public T update(T record) throws IOException {
return null;
}
}
首先在实现类上,还应该将类型模板传递到接口描述中。否则,编译器无法检查
salesforcerecordserviceinpl
上提供的T是否与SalesforceRecordService
public class SalesForceRecordServiceImpl<T extends SalesforceRecordImpl>
implements SalesforceRecordService<T> {
...
公共类SalesForceRecordServiceImpl
实现SalesforceRecordService{
...
(我假设SalesforceRecordImpl是SalesforceRecord的一个子类型)
其次,强制方法使用
@Overrides
注释实现一个接口只能从java 6开始使用,所以如果您使用java 5,您将得到一个编译器错误,因为您在实现接口SalesForceRecordService中没有使用泛型。您可以编写类似这样的代码来解决这个问题r错误:公共类SalesForceRecordServiceImpl实现SalesForceRecordService{@Override public T update(T record)抛出IOException{//TODO自动生成的方法存根返回null;}}
public class SalesForceRecordServiceImpl<T extends SalesforceRecordImpl>
implements SalesforceRecordService<T> {
...