2012-09-17 59 views
1

我有一個通用類型的類,我想獲得通用類型的類。 我用下面的代碼找到了解決方案,但是當我使用ProGuard進行模糊處理時,我的應用程序停止工作。如何在java中定義通用類型的類

有沒有其他方式做到這一點?

public class comImplement<T> { 

    private T _impl = null; 

    public comImplement() {} 

    public T getImplement() { 

    if (_impl == null) { 
     ParameterizedType superClass = 
     (ParameterizedType) getClass().getGenericSuperclass(); 
     Class<T> type = (Class<T>) superClass.getActualTypeArguments()[0]; 
     try { 
     _impl = type.newInstance(); 
     } catch (Exception e) { 
     } 
    } 
    return _impl; 
    } 
} 

回答

2

除非使用另一個通用類(例如List或類似的東西)進行參數化,否則無法獲取超類的類型。由於具體化類型參數編譯後會丟失。你可能想與傳遞類,你即將建立的情況下,以方法「getImplement要解決的問題,象下面這樣:

public T getImplement(Class<T> clz) { 
    // do your initialization there 
} 

這可能與你的代碼提出了另一個問題 - 是競爭條件的情況下,如果對象在多個線程之間共享。

相關問題