2017-02-21 60 views
1

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

假设我们有他们可以操作的操作和请求/响应对象。

我定义了一个基本接口,它规定每个操作应该有执行方法。

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

我想将它扩展到其他一些用于特定操作的接口。例如

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

这是什么情况?目前还不完全清楚这会有什么好处。你能提供一些用例吗? –

+0

@JimGarrison其中一个用法应该清楚上面 - 我想强制执行所有类型的操作,但由于操作的性质,我想要有不同类型的有界对象,他们可以在其上操作。这是否使事情变得不明确,或者一个具体的例子会更有帮助? – rajneesh2k10

回答

3

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

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

这正是我想要做的。感谢您及时的回复。 – rajneesh2k10