将注释值设置为Class <! - ? - >从一个常量出错,为什么?

时间:2011-12-19 17:10:08

标签: java annotations

这是我的注释:

@Target( { ElementType.METHOD } )
@Retention(RetentionPolicy.RUNTIME)
public @interface AuditUpdate
{
    Class<?> value();
}

通过这种方式可以:

@AuditUpdate(User.class)
void someMethod(){}

但是通过这种方式:

private static final Class<?> ENTITY_CLASS = User.class;
@AuditUpdate(ENTITY_CLASS)
void someMethod(){}

我有这个编译错误:

The value for annotation attribute AuditUpdate.value must be a class literal

为什么呢?这是什么意思?

谢谢。

1 个答案:

答案 0 :(得分:5)

这意味着您必须传递一个类文字,而不是一个变量(即使是常量)。

JLS

中明确定义了一个类文字
  

15.8.2班级文学

     

类文字是一个由类名称组成的表达式,   接口,数组或基本类型后跟一个“。”和令牌   类。类文字的类型是Class。它评估为Class   定义所定义的命名类型(或void)的对象   当前实例的类的类加载器。

所以,你不能这样做。