2012-11-12 74 views
2

我一直在試圖得到這樣的工作:參數化參數化方法的返回類型

private static <V, K> V<KnownType> from(K oldObject, Class<? extends V<KnownType>> newClass) { 
    ... 
} 

但是,這種方法的簽名得到一個編譯器錯誤:

The type V is not generic; it cannot be parameterized with arguments <KnownType>

基本上,我想的方法將K轉換爲V<KnownType>。這可能嗎?

此外,一些額外的上下文,以防有人爲此編寫代碼 - 所有V都有一個單參數構造函數,它接受K

在此先感謝。

編輯 - 輸入類是V的一個子類(? extends V...

+1

你可以改變有問題的類的繼承層次嗎? –

+0

我正在SDK上創建一個圖層,該圖層本身無法修改。所以我不能修改'K'或'KnownType',但我可以修改'V'及其所有的子類。 – Ryan

+0

爲什麼你需要這樣做?反思是脆弱的。 –

回答

3

假設:

public interface SomeType<E> 

試試這個:在Java中

private static <V extends SomeType<KnownType>, K> V from(K oldObject, Class<V> newClass) { 
+0

當我問你是否可以改變繼承層次時,這是我想到的。從你的迴應中,聽起來你可以做到這一點:在你想用於'V'的類的祖先中引入'SomeType'。 –

+0

我試圖避免改變這些類,但這似乎是唯一的解決方案。多謝你們。 – Ryan

0

類型參數只能對應於類型。你想V本身需要一種類型,一種更高級的類型的東西。 Java中的泛型不適用於更高類型。