Доступ к статическому полю в аннотации - PullRequest
2 голосов
/ 12 января 2012

Я пытаюсь использовать аннотацию Java в классе Groovy, но не могу установить статическое поле класса Java в качестве параметра:

Аннотация: Id.java

package x.y.annotations;

import java.lang.annotation.ElementType;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Id {

    public Class<Adapter> adapter();

    public Class<Object> targetType();

    public String targetAttribute();

    public String onDelete();

}

Java-класс со статическими полями: XPerson.java

package x.y.static.domain;

public class XPerson {

    public static String ID;

}

И классный класс, где возникает проблема: Person.groovy

package x.y.domain

import x.y.annotations.Id
import x.y.static.domain.XPerson

class Person {

    @Id(adapter = Adapter, targetType = XPerson, targetAttribute = XPerson.ID, onDelete = "delete")
    long id
}

Eclipse помечает часть "targetAttribute = XPerson.ID":

Groovy: ожидается, что x.y.domain.XPerson.ID 'будет встроенной константой типа java.lang. Строка не является выражением свойства в @ x.y.annotations.Id

Я также пробовал что-то вроде «XPerson. @ ID» или определение метода получения для поля ID, но ничего не помогло.

Любые намеки были бы великолепны.

С уважением, майкл

Ответы [ 2 ]

5 голосов
/ 13 июня 2013

Я нашел связанную проблему в Groovy JIRA. Это ошибка. Должно сработать. Смотри https://issues.apache.org/jira/browse/GROOVY-3278

3 голосов
/ 12 января 2012

Значения аннотации могут быть только во время компиляции константные выражения . Оформление поля final является опцией. (С оговоркой, что поле не может быть инициализировано в статическом инициализаторе / и т. Д., Как предполагает фрагмент.)

...