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)?
答案 0 :(得分:3)
问题是因为您正在使用原始类型。您没有为扩展的Operation
接口提供泛型类型,因此编译器不知道每个中的S
和T
都是相同的。将您的ReadOperation
更改为此:
public interface ReadOperation<S extends ReadRequest, T extends ReadResponse> extends Operation<S, T> {
T execute(S readRequest);
}