接口中的Java泛型

3
我在Java中遇到了泛型问题,但我找不到解决方案或者类似使用泛型的示例。我有一组方法,它们具有相同的请求/响应结构。例如,用户填充请求对象中的字段,将该对象传递给辅助方法,然后返回一个响应对象。我的所有请求对象都扩展自共同的Request超类(同样,Response对象来自Response超类)。我希望我的辅助类也具有一致的结构,因此我使用了一个接口。以下是一些代码以说明...
请求超类:
public class SuperRequest {
    // ...
}

示例请求子类:

public class SubRequest extends SuperRequest {
    // ...
}

响应超类:

public class SuperResponse {
    // ...
}

示例响应子类:

public class SubResponse extends SuperResponse{
    // ...
}

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

从接口中可以看出,我想传递一个SuperRequest的子对象,并返回一个SuperResponse的子对象。这是我的实现:

public class SomeImplementation implements SomeInterface {

    @Override
    public SubResponse someMethod(SubRequest request) {
        return null;
    }
}

在Eclipse中,我遇到了编译错误,因为编译器告诉我有未实现的方法和@Override注释 "不覆盖超类型方法"。
有谁可以在这里帮助我吗?我的语法是否不正确或者我对泛型的理解有些偏差?非常感谢您的帮助!
3个回答

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;
    }
}

太棒了!我感觉语法 / 声明只是稍微有点问题。感谢您的帮助! - ggrigery

1

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

public <T extends SuperRequest, U extends SuperResponse> U someMethod(T request);

无法选择特定的子类替换 TU

接口本身必须是泛型 SomeInterface<T extends SuperRequest, U extends SuperResponse>,然后子类可以为TU选择具体的实现。


1

当你实现接口时,也必须声明类型。试试这个:

public class SomeImplementation implements SomeInterface<SubRequest,SubResponse> {

    @Override
    public SubResponse someMethod(SubRequest request) {
        return null;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接