2016-03-10 2 views
2

Это звучит как простой вопрос, но я не могу заставить его работать в Android.Получить статическое значение FIELD с помощью обработки аннотаций

Что получил Ive простой аннотированный поле:

@MyAnnotation 
public static final String TEXT = getText(); 

private static final String getText(){ 
    return "TEXT"; 
} 

Я сделал аннотацию processer обрабатывать @MyAnnotation, но я обнаружил, что это не представляется возможным считанного значения поля с использованием процессора аннотаций. Я также пробовал reflection, но отражение можно использовать только во время выполнения ..

Мне нужно это значение поля для генерации кода на его основе.

Можно просмотреть значение поля, используя обработку аннотаций? Если нет, есть ли способ достичь этого?

ответ

0

Финал можно инициализировать только один раз. В этом случае вы можете следовать этому коду. Надеюсь, это поможет вам.

@MyAnnotation 
public static final String TEXT; 

private static final String getText(){ 
    return "TEXT"; 
} 
+1

Извините, как это даже близко отвечает на мой вопрос? – spili

0
public class CompileTimeAnnotationProcessor extends AbstractProcessor{ 
... 
@Override 
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { 
     // Only one annotation, so just use annotations.iterator().next(); 
    Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(annotations.iterator().next()); 
    Set<VariableElement> fields = ElementFilter.fieldsIn(elements); 
    for (VariableElement field : fields) { 
     field.getConstantValue(); //get the value of static field? 
    } 
    return true; 
} 
... 
} 

метод getConstantValue() может помочь вам.

Возвращает значение этой переменной, если это {@code конечная} поле инициализируется константой времени компиляции.

Смежные вопросы