你能接受varargs作为注释中的值吗?

时间:2015-04-22 13:57:28

标签: java annotations variadic-functions

我想创建一个接受varargs作为默认值的方法注释。以下是用例:

@Authorize(Role.PRESIDENT, Role.ARMY_GENERAL, Role.INSANE_MADMAN)
public void secureMethod() {
   // Code to launch nuclear missile (ok, not really)
}

这是我的注释界面:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Authorize {

    Role[] value() default {}; // Tempted to say Rights... value() default {}

}

这是可能的,如果是的话,怎么样?

2 个答案:

答案 0 :(得分:5)

是的,您可以使用文字数组

@Authorize( {Role.PRESIDENT, Role.ARMY_GENERAL, Role.INSANE_MADMAN } )
public void secureMethod() {

  ...

}

这个常用的一个例子是JUnit的@SuiteClasses做同样的事情

修改

如果您有多个值,

@SuppressWarnings也会接受数组:

 @SuppressWarnings({ "rawtypes", "unchecked" })

答案 1 :(得分:3)

不,这是不可能的,因为varargs对构造函数/方法参数有效,而不是成员。

而且,即使您可以使用varags定义value(),内部值也会转换为数组,因此您不会获得太多收益。在这里使用数组就可以了。