访问注解中的静态字段 [英] Accessing static field in annotation

查看:25
本文介绍了访问注解中的静态字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试在 Groovy 类中使​​用 Java 注释,但无法将 Java 类的静态字段设置为参数:

Im trying use a Java annotation in a Groovy class but have trouble to set a static field of a java class as a parameter:

注解: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

The java class with the static fields: XPerson.java

package x.y.static.domain;

public class XPerson {

    public static String ID;

}

还有问题所在的groovy类:Person.groovy

And the groovy class, where the problem occurs: 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"部分标记为:

Eclipse marks the "targetAttribute = XPerson.ID" part with:

Groovy:期望 'x.y.domain.XPerson.ID' 是 java.lang.String 类型的内联常量,而不是 @x.y.annotations.Id 中的属性表达式

Groovy:expected 'x.y.domain.XPerson.ID' to be an inline constant of type java.lang.String not a property expression in @x.y.annotations.Id

我也尝试过诸如XPerson.@ID"或为 ID 字段定义 getter 之类的方法,但没有任何帮助.

I also tried things like "XPerson.@ID" or defining a getter for the ID field, but nothing helped.

任何提示都会很棒.

问候,迈克尔

推荐答案

注解值只能在编译时使用 常量表达式.使字段 final 是一个选项.(需要注意的是,正如代码段所暗示的那样,该字段不能在静态初始值设定项/等中进行初始化.)

Annotation values may only be compile-time constant expressions. Making the field final is an option. (With the caveat that the field can't be initialized in a static initializer/etc. as the snippet implies.)

这篇关于访问注解中的静态字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆