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

Spi*_*der 4 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)
}
Run Code Online (Sandbox Code Playgroud)

这是我的注释界面:

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

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

}
Run Code Online (Sandbox Code Playgroud)

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

Kon*_*kov 5

不,这是不可能的,因为可变参数是有效的用于构造/方法的参数,而不是成员。

而且,即使您可以value()使用 varags 进行定义,在内部这些值无论如何都会转换为数组,因此您不会获得太多收益。在这里使用数组就好了。


dka*_*zel 5

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

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

  ...

}
Run Code Online (Sandbox Code Playgroud)

常见的一个例子是JUnit的@SuiteClasses,它做同样的事情

编辑

@SuppressWarnings 如果您有多个值,也会采用数组:

 @SuppressWarnings({ "rawtypes", "unchecked" })
Run Code Online (Sandbox Code Playgroud)