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)
这是可能的,如果是的话,怎么样?
不,这是不可能的,因为可变参数是有效的仅用于构造/方法的参数,而不是成员。
而且,即使您可以value()使用 varags 进行定义,在内部这些值无论如何都会转换为数组,因此您不会获得太多收益。在这里使用数组就好了。
是的,你可以使用文字数组
@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)