2015-12-03 3 views
1

Я играю с процессором аннотаций и JavaPoet. У меня есть метод, который я аннотированный с @MyAnno:JavaPoet - получите общий тип

@MyAnno 
Observable<MyClass> get(int id); 

Я хочу, чтобы создать класс, который будет иметь метод:

AsyncSubject<MyClass> get(int id); 

Что я сделал до сих пор является:

ClassName classAsyncSubject = ClassName.get("rx.subjects", "AsyncSubject"); 
TypeName newReturnType = ParameterizedTypeName.get(classAsyncSubject, get(executableElement.getReturnType())); 

, который дает мне:

AsyncSubject<Observable<MyClass>> 

Как получить только MyClass?

ответ

2

Если возвращаемый тип всегда является Observable<X>, вы можете привести результат от get(executableElement.getReturnType()) к ParameterizedTypeName и доступ первого типа аргумент:

((ParameterizedTypeName) get(executableElement.getReturnType()).typeArguments.get(0) 

Тип, емкость и здравомыслие проверки применяются.