Javapoet - TypeName - HashMap ‹Строка, HashMap‹ Строка, Список ‹String› ›› генерация?

Я изучаю Javapoet как кандидата на автогенерацию некоторых объектов модели протокола. Grat API!

вопрос: Могу ли я сгенерировать поле сложного типа, например:

TypeName myType = HashMap<String, HashMap<String, List<String>>>; ?

Например, если я хочу упростить TypeName: "HashMap‹ String, String> "- я могу легко добиться этого с помощью:

ParameterizedTypeName.get (Map.class, String.class, String.class);

Заранее спасибо!


person Max    schedule 30.09.2016    source источник


Ответы (2)


java.lang.IllegalArgumentException: индекс 6 для $ T вне диапазона (получено 5 аргументов)

таким образом, вы не можете сгенерировать фи

person dong sheng    schedule 09.11.2016

Мы можем использовать TypeMirror, который будет работать независимо от того, насколько сложен параметризованный тип.

  1. Создайте образец метода, содержащий требуемый тип в качестве возвращаемого типа.

    Map<String, List<String>> foo() {}
    
  2. Затем отразите возвращаемый тип с помощью отражений Java следующим образом:

    TypeName complexParameterizedType = ParameterizedTypeName.get(TestClass.class.getDeclaredMethod("foo").getGenericReturnType());
    MethodSpec meth = MethodSpec.methodBuilder("targetMethod").returns(complexParameterizedType).build();
    
person gaurabdg    schedule 21.09.2020