Java 方法注释似乎考虑了参数名称

Java 方法注释似乎考虑了参数名称,java,annotations,Java,Annotations,考虑以下代码 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) @interface Audita

考虑以下代码

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface Auditable {
    public String value();
}

class Order {
    public static final String NAME = "ORDER";
}

public class TestAnnotations {

    @Auditable(Order.NAME)
    public void testMethod(Order Order) {

    }

    public static void main(String[] args) {

    }
}
它编译失败,出现错误

java:..\TestAnnotations.java:28:属性值必须是常量

但是如果我更改testMethod的参数名

公共无效测试方法(顺序o

它编译

似乎在注释中

    @Auditable(Order.NAME)
将考虑形式参数而不是类型顺序。 但是,我在文档中找不到任何引用,说明在处理注释时,方法参数在上下文中


是否可以指定Order.NAME引用的是类型“Order”而不是参数(实例)“Order”?

它在Eclipse上编译得很好,但从
javac
获得了相同的消息。大写的变量名(
顺序
)不是一个好的做法,并且与此相反。我确认@Bhesh的评论。至少在某种程度上,这似乎是一个编译器问题。同时,如果您遵循其他注释中指出的正常编码约定,那么这种类型的混淆首先就不会发生。有什么理由不这么做吗?我在一个工具生成的代码中发现了这个问题,如果能以某种方式解决的话,我很好奇。