接口(interface)中的 Java 泛型

标签 java generics interface

我在 Java 中遇到了泛型问题,我无法在网上找到以类似方式使用泛型的解决方案或示例。我有一组在相同请求/响应结构中的方法。例如,用户填充 Request 对象中的字段,将对象传递给辅助方法,然后返回 Response 对象。我所有的请求对象都从一个通用的 Request 父类(super class)扩展而来(同样,Response 对象也从 Response 父类(super class)扩展而来)。我希望我的助手类也有一个一致的结构,所以我使用了一个接口(interface)。这是一些代码来说明...

请求父类(super class):

public class SuperRequest {
    // ...
}

示例请求子类:

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

响应父类(super class):

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 符号“不覆盖父类(super class)型方法”。

有人可以帮我吗?是我的语法不正确还是我对泛型的理解有点偏差?非常感谢任何帮助!

最佳答案

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

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)中的 Java 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9364767/

相关文章:

在一个包中定义的接口(interface)在不同的包中不起作用

java - 如何向Oracle 数据库插入50K 条记录?

generics - 在 TypeScript 中检测泛型类型

java - 无效的数据访问 ApiUsageException : Parameter value element did not match expected type

java - 为什么使用工厂方法时 TypeToken 无法捕获泛型类型?

c# - 如何检查我的未初始化变量是否为 List 类型?

xcode - NSButton "text only"点击时突出显示的变体?

java - 我们可以创建一个接口(interface)对象吗?

java - 模型(在 MVC 中)和 DAO 应该如何交互?

java - 如何用jaxb包装子列表