接口中的Java泛型

接口中的Java泛型,java,generics,interface,Java,Generics,Interface,我在Java中遇到了泛型问题,我在网上找不到以类似方式使用泛型的解决方案或示例。我有一组方法,它们位于相同的请求/响应结构中。例如,用户填充请求对象中的字段,将对象传递给帮助器方法,然后返回响应对象。我的所有请求对象都是从一个公共请求超类扩展而来的(类似地,响应对象也是从一个响应超类扩展而来的)。我希望我的助手类也有一个一致的结构,所以我使用了一个接口。下面是一些代码来说明 请求超级类: public class SuperRequest { // ... } public class

我在Java中遇到了泛型问题,我在网上找不到以类似方式使用泛型的解决方案或示例。我有一组方法,它们位于相同的请求/响应结构中。例如,用户填充请求对象中的字段,将对象传递给帮助器方法,然后返回响应对象。我的所有请求对象都是从一个公共请求超类扩展而来的(类似地,响应对象也是从一个响应超类扩展而来的)。我希望我的助手类也有一个一致的结构,所以我使用了一个接口。下面是一些代码来说明

请求超级类:

public class SuperRequest {
    // ...
}
public class SuperResponse {
    // ...
}
请求子类示例:

public class SubRequest extends SuperRequest {
    // ...
}
public class SubResponse extends SuperResponse{
    // ...
}
响应超级类:

public class SuperRequest {
    // ...
}
public class SuperResponse {
    // ...
}
响应子类示例:

public class SubRequest extends SuperRequest {
    // ...
}
public class SubResponse extends SuperResponse{
    // ...
}
界面:

public interface SomeInterface {
    public <T extends SuperRequest, U extends SuperResponse> U someMethod(T request);
}
在Eclipse中,我得到编译错误,因为编译器告诉我我有未实现的方法,并且
@Override
符号“不重写超类型方法”


有人能帮我吗?是我的语法不正确还是我对泛型的理解有点不正确?非常感谢您的帮助

尝试将界面和实现更改为:

interface SomeInterface<T extends SuperRequest, U extends SuperResponse> {
    public U someMethod(T request);
}

class SomeImplementation implements SomeInterface<SubRequest, SubResponse> {

    @Override
    public SubResponse someMethod(SubRequest request) {
        return null;
    }
}
interface-SomeInterface{
公共方法(T请求);
}
类SomeInterface实现SomeInterface{
@凌驾
公共子响应方法(子请求){
返回null;
}
}

目前,SomeInterface的实现必须实现参数化方法,即:

public <T extends SuperRequest, U extends SuperResponse> U someMethod(T request);
public方法(T请求);
它不能选择一个特定的子类来代替
t
U


接口本身必须是泛型的
SomeInterface
,然后子类可以为
T
U

选择具体的实现。在实现接口时,还必须声明类型。试试这个:

public class SomeImplementation implements SomeInterface<SubRequest,SubResponse> {

    @Override
    public SubResponse someMethod(SubRequest request) {
        return null;
    }
}
公共类SomeImplementation实现SomeInterface{
@凌驾
公共子响应方法(子请求){
返回null;
}
}

太棒了!我有一种感觉,我只是在语法/声明上有点偏离了。谢谢你的帮助!