2015-10-19 38 views
0

這裏是我的代碼:如何獲得泛型類的持久化類參數? <T>

抽象類

public abstract class AbstractClass<T>{ 

    public abstract Class<?> getPersistentClass(); 

    public void invokeNothing(){ 
     Class<T> c = getPersistentClass(); 
     // do something.... 
     // some code... 
    } 

} 

CommonClass

public class CommonClass<T> extends AbstractClass<T>{ 

    public Class<?> getPersistentClass(){ 
     // how to get the persistent class of generic T 
     // T.class 
     return // T.class 
    } 

} 

服務

public class CommonService{ 

    @Autowired 
    private CommonAbstractClass<Person> commonClass; 

    public void invoke(){ 
     commonClass.invokeNothing(); 
    } 


} 

如何獲取類的持久化類參數通用?在我的類CommonFlass中的方法getPersistentClass();

請幫我謝謝...

回答

0

其實是沒有辦法(至少沒有簡單的方法,我除了在一些情況下,反射所知道的),以獲得泛型類型參數的運行時類型由於type erasure。您可以使用下面的安全解決方法:

public class CommonClass<T>{ 

    private final Class<T> type; 

    public CommonClass(Class<T> type) { 
     this.type = type; 
    } 

    public Class<T> getMyType() { 
     return this.type; 
    } 

} 

不過你可能需要初始化它喜歡:

CommonClass<Person> cp = new CommonClass<Person>(Person.class); 

如果你正在使用Spring,你可以找到這個answer有用。

+0

但我使用的是@Autowired彈簧。只是希望沒有使用參數實例化構造函數。有沒有辦法做到這一點? – teodoro

+0

@ user3047741:檢查編輯。 –