Java 使用枚举上方法调用的值作为注释参数

Java 使用枚举上方法调用的值作为注释参数,java,enums,annotations,Java,Enums,Annotations,我有 我想在RESTAPI方法的注释上使用path的值 enum Operations { OPERATION_NAME("operation/path"); private final String path; Operations(String path) { this.path = path; } public String path() { return path; } } 但是java编译器抱怨

我有

我想在RESTAPI方法的注释上使用path的值

enum Operations { 
 OPERATION_NAME("operation/path");    
    private final String path;

    Operations(String path) {
        this.path = path;
    }

    public String path() {
        return path;
    }
}
但是java编译器抱怨

属性值必须是常量

有没有办法在java8中解决这个问题


我知道我可以有一个带有操作名的枚举和一堆带有路径的静态字符串字段(静态字符串可以用作@Path annotation中的属性),但我不喜欢这种方法。

您不能在annotation参数中使用枚举方法,但您可以创建类:

  @Path(Operations.OPERATION_NAME.path())
  void operation() {
  }

不会有重复,您仍然可以像以前一样使用枚举,并且注释属性值中的
静态字符串
文本必须在编译时求值,而
枚举
实例只能在运行时求值。@UsagiMiyamoto不是
枚举
而是方法
Enum
可以用作注释的参数。编译时无法对语句求值,作为在类加载时创建的对它们的引用…一堆带有路径的静态字符串字段是一种方法。顺便问一下,你想用它实现什么?OP写道,他们不喜欢
枚举中的
静态
字段方法。。。为什么您认为他们希望将它放在一个单独的
类中,即将
枚举
隐藏在其内部?这并不完美,但似乎不是更好的选择。我无法将操作名称作为枚举上的方法调用。我必须有静态字符串。所以现在,至少我看到所有这些静态字符串都被使用了(在操作enum中)@UsagiMiyamoto我只是提供了一种方法,如何将enum与
静态字符串
字段连接起来。没有更好的办法了
public final class Operations {

    private Operations() {};

    public static final String op1 = "operation/path";
    public static final String op2 = "operation2/path";

    public enum Enum { 

        OPERATION1(op1),
        OPERATION2(op2);

        private final String path;

        Enum(final String path) {
            this.path = path;
        }

        public final String path() {
            return path;
        }
    }

}