接口中的Java泛型

ggr*_*ery 3 java generics interface

我遇到了Java中的泛型问题,我无法在网上找到以类似方式使用泛型的人的解决方案或示例.我有一组处于相同请求/响应结构中的方法.例如,用户填充Request对象中的字段,将对象传递给辅助方法,然后返回一个Response对象.我的所有请求对象都从一个常见的Request超类扩展(类似地,来自Response超类的Response对象).我希望我的帮助程序类也具有一致的结构,所以我使用了一个接口.这里有一些代码来说明......

要求超级:

public class SuperRequest {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

示例请求子类:

public class SubRequest extends SuperRequest {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

响应超级:

public class SuperResponse {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

示例响应子类:

public class SubResponse extends SuperResponse{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

界面:

public interface SomeInterface {
    public <T extends SuperRequest, U extends SuperResponse> U someMethod(T request);
}
Run Code Online (Sandbox Code Playgroud)

正如您从界面中看到的,我想传递一个子对象,SuperRequest我想返回一个子对象SuperResponse.这是我的实现:

public class SomeImplementation implements SomeInterface {

    @Override
    public SubResponse someMethod(SubRequest request) {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

在Eclipse中,我得到编译错误,因为编译器告诉我我没有未实现的方法,并且@Override符号"不会覆盖超类型方法".

有人能帮我一下吗?我的语法不正确还是我对泛型有点了解?任何帮助是极大的赞赏!

ggr*_*ner 7

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)