2016-04-25 7 views
0

Ich habe eine Java-Klasse mit einem generischen Typ. In der Geschäftslogik dieser Klasse muss ich auf das Objekt Class des generischen Typs verweisen. Daher erhält das Konstruktor das Class Objekt als Argument übergeben:Wie Klasse des generischen Arguments in einem CDI-Producer abrufen?

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

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

ich die Instanz (en) diese Klasse erstellen CDI Hersteller verwenden, deren squeleton sieht aus wie

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

Wie kann ich genericTypeClass abrufen ?

+0

Wenn Sie auf die Fragen beantworten wissen, warum fragen Sie? –

+0

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

Antwort

1

Solution ist ein zwei-Liner:

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); 
    } 
} 
Verwandte Themen