2017-09-25 63 views
0

我有這樣的接口:如何繞過Java泛型類型檢查

public T evaluate(float fraction, T startValue, T endValue);

其他代碼對待每一個T類型爲Object,最後我會得到的返回值,這是Object也是。

我想要的是通過startValueendValue作爲整數,但返回一個完全不同的實例(而不是Integer)。我會強制將返回值轉換爲我所想的。

我所做的就是更換T與對象,像這樣:

public Object evaluate(float fraction, Object startValue, Object endValue)

但失敗了,我想如果像? extends T定義的接口將工作,但事實並非如此。 (對嗎?)

那麼有沒有什麼辦法可以繞過泛型類型檢查?

+2

'我要的是通過在startValue和endValue值作爲interger' - 爲什麼不寫'公共whateverTypeYouWantToReturn評估(浮動部分,詮釋在startValue,INT endValue值);'? – Eran

+0

@Eran這是一個我無法修改的界面。所以我正在尋求解決方法。 – reavenisadesk

+0

這並沒有絲毫的意義。首先,描述如何通過用Object替換類型參數來更改接口方法,然後在評論中告訴我們不能修改接口。 – Holger

回答

0

我想你有一個像interface Name<T>{}的接口。 爲什麼不讓T成爲Integer,然後將所返回的內容轉換爲您想要的內容。 (如果我想獲得一個字符串):

//interfaceInstance is Name<Integer> 
//fraction is float, startValue and endValue are Integer 
String value = String.valueOf(interfaceInstance.evaluate(fraction, startValue endValue)) 
+0

是的,這是我要做的方式,我問這是因爲我需要遵循一種代碼格式,我希望代碼看起來像通常一樣,但是不管怎樣,如果沒有其他選擇,我會得到回報價值並在其他地方處理。 – reavenisadesk

4

假設你的界面具有T泛型參數,添加第二個類型,比如R:

interface MyInterface<T,R> { 
    public R evaluate(float fraction, T startValue, T endValue); 
} 
+0

@reavenisadesk好吧,然後,使用它與對象,並自己做轉換。 –

+0

我嘗試使用所有類型作爲對象,但強制轉換在運行時失敗,它認爲返回值是一個Int類型 – reavenisadesk

+0

我不知道你在'evaluate'方法裏面做了什麼,但是因爲存在'float fraction'你應該使用這種方法,即不同類型的輸入和輸出。 –