2017-02-21 30 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