The level of dynamism is high which makes annotation processing prohibitive. We would have to figure out a way to support custom converters and call adapters participating in code generation. Additionally, Java lacks facilities for representing parameterized types as literals whereas they're easy to get with reflection. Finally, HTTP calls are expensive operations so having a little reflection doesn't add much overhead