我創建覆蓋其擦除爲2個實現的接口之間是相同的方法簽名類的類,但在通用型的問候(微小的差別一個是一種方法推斷的類型,另一種是推斷類的類型)。我正在尋找一個完美的解決方案。我只能編輯繼承的類,而不是原始的傳統接口。名稱衝突,超越失敗,在實現兩個接口與同一消失
要顯示的情況下,我做了一個抽象的來樣,來理解這個問題:
我得到了開發傳統的父類:
public class Developer<C>{
Rate<C> getRate(Taxes<C> tax){ /*...*/ }
}
我也得到了一個可出租的傳統接口,與幾乎相同的簽名
public interface Rentable {
<C> Rate<C> getRate(Taxes<C> taxes);
}
作爲開發商是不可出租,在我的模型,我創建一個特殊的 開發商這既是一個開發者,和可出租材料。
public class OutsourcableDeveloper<C>
extends Developer<C>
implements Rentable{
@Override
public Rate<C> getRate(Taxes<C> taxes){ /*...*/}
}
,然後我得到了臭名昭著的
名稱衝突:該方法的getRate(Developer.Taxes)類型的 OutsourcableDeveloper有型可出租的同一消失的 的getRate(Developer.Taxes),但所以OutsourcableDeveloper.getRate()隱藏 開發人員和可出租不覆蓋它
我怎樣才能擺脫它。的getRate()?
這似乎有點不合邏輯失敗的共同覆蓋,但不允許再擴大這兩個標記爲擦除是相等的。
它真的很重要,以至於超類型的一個推斷,從德法類型,並從特別是當我不打算叫何超在我的實現類中的其他事實?鑑於這種簡化,解決這個問題有沒有可能是一個竅門?
編輯:我開了一個更抽象的,少的解決方案爲導向,以我的實際問題,問題討論的繼承設計問題,我相信這是我遇到的實際問題的相關精髓:Why can't I extend an interface "generic method" and narrow its type to my inherited interface "class generic"?
EDIT2 :前面的問題導致我在這裏發佈
很好的答案謝謝(我會等待看看是否有任何棘手或簡單的問題)!順便說一句,如果我不能選擇方法在我的孩子的方法限制版本,名稱衝突:類型OutsourcableDeveloper類型的getRate(Developer.Taxes )具有與getRate(Developer.Taxes )類型相同的擦除開發者但不覆蓋它 –
Whimusical
在我看來,這些行爲沒有理由,編譯器應該強制執行更嚴格的兩個。我實現了同樣的方法,在一個接口中,類型是*,在另一個接口中必須與類相同,所以如果你實現了這兩個接口,受限制的類可以透明地暴露出來,而不會破壞我相信的任何不連貫性。 – Whimusical
這是不可能的。接口的調用者期望允許任何參數。如果你通過編程限制他們,你會破壞OOP意圖。 –