2016-04-25 55 views
0

我有一個具有泛型類型的Java類。在該類的業務邏輯中,我需要參考泛型類型的Class對象。因此,構造得到作爲參數傳遞的Class對象:如何檢索CDI生產者中的通用參數類?

public class MyClass<GENERIC_TYPE>{ 
    private Class<GENERIC_TYPE> genericTypeClass; 

    public MyClass(Class<GENERIC_TYPE> genericTypeClass){ 
     this.genericTypeClass=genericTypeClass; 
    } 
} 

我創建使用CDI生產商,其squeleton看起來像

public class MyClassProducer{ 
    @Produces 
    MyClass<GENERIC_TYPE> createMyClass(InjectionPoint injectionPoint){ 
     Class<GENERIC_TYPE> genericTypeClass = ???? 
     return new MyClass(genericTypeClass); 
    } 
} 

如何檢索genericTypeClass了這個類的一個實例(S) ?

+0

如果您知道答案的問題,你問爲什麼? –

+0

http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ – rcomblen

回答

1

解決方案是一個兩個班輪:

public class MyClassProducer { 
    @Produces 
    <GENERIC_TYPE> MyClass<GENERIC_TYPE> createMyClass(InjectionPoint injectionPoint){ 
     final ParameterizedType parameterizedType = (ParameterizedType) injectionPoint.getType(); 
     final Class<GENERIC_TYPE> genericTypeClass = 
      (Class<GENERIC_TYPE>) parameterizedType.getActualTypeArguments()[0]; 
     return new MyClass(genericTypeClass); 
    } 
}