2009-08-31 67 views
52

我定义自己的自定义注释Java自定义注释:使可选属性

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

如何,如果在所有,我可以使可选

+0

谢谢;我不知道这个属性是强制性的,如果没有提供'默认'声明:) – 2013-11-26 12:32:19

回答

84

您可以provide a default value该属性的属性:

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

找到它之前,但我认为这是公平的选择你的答案 – flybywire 2009-08-31 15:26:08

+4

@flybywire你怎么能说你发现它之前丹作为15:18回答他15:17回答? – redochka 2012-03-15 14:19:13

+8

也许丹类型更快:-) – 2012-09-19 06:43:52

2

找到了。它不能是可选的,但是默认可以声明如下:

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

如果没有缺省是有意义的是“空”的值,那么这是一个问题。

+0

如果你需要一个默认类,并且实际上你可能需要String.class作为一个值,可以考虑使用java.util.Void.class来代替(因为你不能以任何其他方式实例化或真正使用它) ) – Ajax 2012-09-22 14:50:48

1

对于可选属性,您需要为该属性提供默认值,您可以使用“默认”关键字提供默认值。

注意:只有一个属性,您可以使用属性名称的值为。 如果使用属性名称的值,则可以直接传递值,如@MyCustomAnnotation(true)而不是@MyCustomAnnotation(myType = true)。

See this example for more details