Возвращать правильно типизированные объекты при создании класса с использованием javapoet

Я работаю над процессором аннотаций и использую JavaPoet для генерации выходного класса из обработки, но я не могу найти способ заставить сгенерированный метод вернуть правильно типизированный объект. Например, вывод, который я хотел бы получить, выглядит примерно так...

public static final Map<String, Object> getObjects() {
  return objects;
}

Однако я могу заставить его сделать что-то вроде этого...

public static final Map getObjects() {
  return objects;
}

Я использую метод return в MethodBuilder, но для него требуется правильный класс в качестве возвращаемого типа, так как же вы можете добавить модификаторы, подобные методу, по мере его создания? Вот простая версия того, что у меня есть...

MethodSpec.methodBuilder("getObjects")
    .addModifiers(Modifier.PUBLIC, Modifier.STATIC)
    .returns(Map.class)
    .addStatement("return objects").build()

Я пытался искать везде и не могу найти ответ на этот тип вещей. Я знаю, что все Карты технически, но я бы хотел избежать чёртовой неконтролируемой подсветки приведения в Android Studio, а также неправильно, что в возвращаемом методе нет правильных типов. Это возможно, или я должен просто принять выделение и двигаться дальше? Спасибо.

1 ответ

Решение

Нечто подобное должно работать:

.returns(ParameterizedTypeName.get(ClassName.get(Map.class),
                                   ClassName.get(String.class),
                                   ClassName.get(Object.class)))

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

Другие вопросы по тегам