扩展通用接口并使其在Java

时间:2017-02-21 18:12:34

标签: java generics interface

TLDR:我想在扩展后使通用接口定义更严格。

让我们说一下他们可以操作的操作和请求/响应对象。

我已经定义了一个基本界面,该界面要求每个操作都应该包含执行方法。

public interface Operation<S, T> {
    T execute(S request);
}

我想将它扩展到一堆用于特定操作的其他接口。 e.g。

public interface ReadOperation<S extends ReadRequest, T extends ReadResponse> extends Operations {
    T execute(S readRequest);
}

通常,我希望在扩展接口中使用更严格的定义覆盖基本接口执行定义。但遗憾的是,由于java使用新的执行定义添加了重载方法,因此无法实现。

我想知道我的直觉缺乏什么,以及我可以通过其他形式实现它。告诉我,如果我做错了。

我可以在这里找到最近的地方:Overriding a method contract in an extended interface that uses generics (Java)?

1 个答案:

答案 0 :(得分:3)

问题是因为您正在使用原始类型。您没有为扩展的Operation接口提供泛型类型,因此编译器不知道每个中的ST都是相同的。将您的ReadOperation更改为此:

public interface ReadOperation<S extends ReadRequest, T extends ReadResponse> extends Operation<S, T> {
    T execute(S readRequest);
}