在注释中传递方法

时间:2015-03-05 14:37:54

标签: java

我创建了一个类似下面的注释

@Retention(RetentionPolicy.RUNTIME)
public @interface TestData
{
String[] values();

}

我在我的课堂上使用它,如下面

@TestData({"test1","test2","test3"})

public void testMethod(String data) {
   //Some code here
}

我想做的是..对于TestData注释,我想动态生成一些值并传递给它。对于Eg:

假设我有一个名为getData();

的方法
public string[] getData() {
   //Code to return an array
   return array[];
}

现在我希望能够将getData()方法的值传递给我的@TestData注释。这可能吗?

1 个答案:

答案 0 :(得分:1)

不,这是不可能的,注释上的值必须在编译时知道,因此您不能使用方法的结果,因为在运行程序之前不会知道。

这在JLS 9.7.1(ElementValue,V的描述)中有解释。这段话说:

  • 如果类型是原始类型或String它必须是常量表达式(即编译时常量)
  • 如果类型为Class,则必须是类文字
  • 如果类型是枚举,则必须是枚举常量
  • 如果类型是数组,则上述规则适用于数组元素

方法的返回值不是编译时常量。