我想创建一个接受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 {}
}
这是可能的,如果是的话,怎么样?
答案 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()
,内部值也会转换为数组,因此您不会获得太多收益。在这里使用数组就可以了。