【问题标题】:Enum in Annotations注释中的枚举
【发布时间】:2012-03-29 12:26:23
【问题描述】:

我有一个无法更改的注释,它需要两个 String 参数。

我想这样使用它:

@RequestMapping( MyUrls.FOO.a, MyUrls.FOO.b )

这就是我想象的实现方式

public enum MyUrls {
    FOO("a", "b"), 
    BAR("c", "d");

    public String a, b;
    MyUrls(String a, String b) {
        this.a = a;
        this.b = b;
    }
}

这不起作用,因为无法静态解析 ab

我有哪些替代方法更好:

class MyUrls {
    public static String FOO_A = "";
    public static String FOO_B = "";
    // ...
}

【问题讨论】:

    标签: java static enums annotations


    【解决方案1】:

    虽然你的问题看起来不像是一个问题,而是一个宣言,但我同意你的看法。 定义注释时不能使用枚举成员。只有“真正的”常量,即静态最终字段和常量表达式是适用的。所以,目前没有好的选择。

    【讨论】:

      【解决方案2】:

      您可以使用静态内部类对字符串进行分组。

      class MyUrls {
          public static final class Foo{
             public static final String A = "";
             public static final String B = "";
             // ...
          }
      }
      //works as
      MyUrls.Foo.A
      

      【讨论】: