访问注释中的静态字段

时间:2012-01-12 16:12:19

标签: groovy annotations

我尝试在Groovy类中使用Java注释,但很难将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;

}

发生问题的groovy类: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.String类型的内联常量,而不是@ x.y.annotations.Id中的属性表达式

我还尝试过“XPerson。@ ID”或者为ID字段定义一个getter,但没有任何帮助。

任何提示都会很棒。

此致 迈克尔

2 个答案:

答案 0 :(得分:5)

我在Groovy JIRA中发现了一个相关问题。这是一个错误。应该管用。见https://issues.apache.org/jira/browse/GROOVY-3278

答案 1 :(得分:3)

注释值可能只是编译时constant expressions。制作字段final是一种选择。 (需要注意的是,该字段无法在静态初始化程序/等中初始化,如代码段所示。)