2009-08-31 68 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