Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通用接口实现不工作_Java_Generics_Inheritance - Fatal编程技术网

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> {
   ...