2012-02-20 14 views
7

Czy ktoś wie, aby wygenerować następującą ogólną deklarację Metoda z zastosowaniem CodeModel:Sun CodeModel metoda rodzajowa

public <T> T getValue(Class<T> clazz){...} 

Wykorzystanie:

ValueType value = getValue(ValueType.class); 

wydaje się nie być obsługiwane przez istniejące implmentation.

wiem mogę obsłużyć kod w następujący sposób, ale wymaga obsady:

public Object getValue(Class class){...} 

Wykorzystanie:

ValueType value = (ValueType)getValue(ValueType.class); 

Oczywiście jest to nieco niechlujny ze względu na obsadę.

+0

Ciekawe, po prostu znaleźć raport o błędzie, który wspomina o tym problemie: http://java.net/jira/browse/CODEMODEL-4. Dodatkowo, ostatnio to zostało skomentowane. –

Odpowiedz

11

Utwórz metodę z typem zwracanym Object, utwórz metodę, a następnie nadpisz typ zwracany.

final JDefinedClass exampleClass = codeModel._class("com.example.ExampleClass"); 
final JMethod method = exampleClass.method(JMod.PUBLIC, Object.class, "getValue"); 
final JTypeVar t = method.generify("T"); 
method.type(t); 
method.param(codeModel.ref(Class.class).narrow(t), "type"); 
method.body()._return(JExpr._null()); 
+0

Działa to jak urok. Dziękuję bardzo za ustawienie mnie na właściwej ścieżce. Wolałem aktualizować odniesiony problem z jirą. –

Powiązane problemy