java自定义注释:使属性可选

fly*_*ire 61 java annotations metaprogramming

我定义了自己的自定义注释

@Target(value={ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation  {
    Class<?> myType();
}
Run Code Online (Sandbox Code Playgroud)

如何,如果有的话,我可以使属性可选

Dan*_*yer 96

您可以属性提供默认值:

@Target(value={ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation  {
    Class<?> myType() default Object.class;
}
Run Code Online (Sandbox Code Playgroud)

  • 也许Dan类型更快:-) (9认同)
  • FYI为其他任何人将一系列字符串传递给他们的注释.我发现我能够使用`String [] names()default {}`来默认传递一个空数组. (5认同)
  • @flybywire你怎么能说你在Dan之前发现它,因为你在15:18回答他15:17回答? (4认同)

fly*_*ire 5

找到了。它不能是可选的,但可以像这样声明默认值:

@Target(value={ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation  {
    Class<?> myType() default String.class;
}
Run Code Online (Sandbox Code Playgroud)

如果没有默认值可以作为“空”值有意义,那么这是一个问题。