Аннотации Android: использование ресурса String для предоставления значения аннотации

Может быть, я не вижу леса за деревьями, но есть ли способ использовать ресурс String для предоставления значения в поле аннотации. Я хотел бы что-то вроде этого

@Rest(rootUrl=@StringRes(R.string.root_url), converters=MappingJackson2HttpMessageConverter.class) 
public interface MyRestService extends RestClientErrorHandling {...

Значение rootUrl в аннотации @Rest должно получить значение из ресурса String R.string.root_url.

Любое направление приветствуется.


person Mill3r    schedule 02.10.2014    source источник


Ответы (2)


Через несколько минут после того, как я разместил вопрос, я нашел Почему значение атрибута аннотации Rest.rootUrl должно быть постоянным выражением? что в значительной степени отвечает на вопрос.

По сути, я могу использовать метод setRootUrl(String rootUrl) в оставшемся интерфейсе службы для ввода значения rootUrl во время выполнения. Если вам нужна дополнительная информация, пожалуйста, обратитесь к ответу в указанном вопросе SO для получения более подробной информации.

person Mill3r    schedule 02.10.2014

Меня тоже интересует эта проблема. Но, подумав, я думаю, что это почти невозможно.

  1. Java предоставляет три типа RetentionPolicy: SOURCE, CLASS, RUNTIME. Он определяет жизнь этой аннотации. Только аннотация RUNTIME будет сохранена во время выполнения. Но откуда компилятору знать, будет ли сохранена аннотация?

  2. Аннотации обрабатываются APT (инструментом обработки аннотаций), который полностью отличается от компилятора исходного кода. Так как же APT может знать компилятор и даже JVM?

Исходя из двух вышеперечисленных пунктов, нельзя использовать переменные, определенные в коде, в аннотации.

person peacepassion    schedule 26.05.2015