2014-02-17 75 views
0

除了添加註釋之外,有沒有辦法在return語句中正確解決關於將Boolean轉換爲K的警告?我正在實例化Foo<Boolean, Integer>,所以KInteger當實例方法foo()被執行時,是否正確?爲什麼泛型類型不能傳播到所有的類方法?

public class Foo<K, V> { 
    public static void main(String[] args) { 
     (new Foo<Boolean, Integer>()).foo(); 
    } 

    public K foo() { 
     return (K) Boolean.FALSE; 
    } 
} 

編輯:所以,有人建議,我結束了重構代碼,現在一切都燦爛。

+0

如果你提供了一個String類型的參數呢? '(String)Boolean'如何工作? –

+0

在運行時'ClassCastException'有什麼問題? – revolt

+2

它打破了每一個良好的實踐編程概念。 –

回答

4

通過鑄造Boolean.FALSEK,你基本上說,K應該總是Boolean(或您的代碼會拋出異常)。那麼爲什麼不將所有出現的K更改爲Boolean,並從類定義中刪除泛型類型參數?

public class Foo<V> 
{ 
    public Boolean foo() 
    { 
     return Boolean.FALSE; 
    } 
} 

如果你真的打算有Foo<K, V>那麼你必須只包括與類的任何K(及任何V)的工作方法。所以,我建議你刪除foo()並將其移動到其他地方,其中已知Foo<K, V>的特定實例對於K總是具有Boolean

+0

你已經向我指出了正確的方向 - 我最終創建了一種從「generic」類中調用的回調函數,並且該回調函數操作布爾值並將其返回到「generic」類。 – revolt

相關問題