使用Enum上方法调用的值作为注释参数

时间:2017-08-08 12:46:17

标签: java enums annotations

我有

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

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

    public String path() {
        return path;
    }
}

我想在REST API方法上使用注释路径值

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

但java编译器抱怨

  

属性值必须是常量

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

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

1 个答案:

答案 0 :(得分:1)

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

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;
        }
    }

}

不会有重复,您仍然可以像以前一样使用枚举,并在annotatios中使用static String文字