JavaPoet — ParameterizedTypeName с вложенным ParameterizedTypeName

Как я могу создать следующее:

HashMap<String, Pair<Boolean, Object>> mHashMap = new HashMap();

У меня есть следующее:

ParameterizedTypeName subType = ParameterizedTypeName.get(Pair.class, Boolean.class, Object.class);
ParameterizedTypeName mainType = ParameterizedTypeName.get(HashMap.class, String.class, Pair.class);
 builder.addField(
            FieldSpec.builder(mainType, "mHashMap", Modifier.PRIVATE, Modifier.FINAL)
                    .initializer("new HashMap<>()")
                    .build()
    );

Как мне теперь объединить subType с mainType, чтобы получить правильное mainType?

Мне нужно что-то вроде следующего:

ParameterizedTypeName mainType = ParameterizedTypeName.get(HashMap.class, String.class, subType);

person prom85    schedule 09.02.2018    source источник


Ответы (1)


Что-то вроде этого должно работать:

ParameterizedTypeName subType = ParameterizedTypeName.get(Pair.class, 
                                                          Boolean.class,
                                                          Object.class);
ClassName string = ClassName.get("java.lang", 
                                 "String");
ClassName hashMap = ClassName.get("java.util", 
                                  "HashMap");
ParameterizedTypeName mainType = ParameterizedTypeName.get(hashMap, 
                                                           string,
                                                           subType);

FieldSpec.builder(mainType, 
                  "mHashMap",
                  Modifier.PRIVATE,
                  Modifier.FINAL)
         .initializer("new HashMap<>()")
         .build();

Приведенный выше код должен генерировать:

private final HashMap<String, Pair<Boolean, Object>> mHashMap = new HashMap<>();

Надеюсь, это поможет.

person El Hoss    schedule 11.02.2018
comment
ClassName.get("java.lang", "String") можно заменить на ClassName.get(String.class), но спасибо, это именно то, что я искал - person prom85; 12.02.2018