web-dev-qa-db-ja.com

javaカスタム注釈:属性をオプションにする

独自のカスタムアノテーションを定義しました

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

どのようにして、属性をオプションにすることができますか

60
flybywire

次のことができます デフォルト値を提供 属性:

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

それを見つけた。オプションにすることはできませんが、デフォルトは次のように宣言できます。

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

デフォルトが「空の」値として意味をなさない場合、それは問題です。

3
flybywire

オプション属性の場合、その属性のデフォルト値を指定する必要があります。「default」キーワードを使用してデフォルト値を指定できます。

注:1つの属性についてのみ、属性名をvalueとして使用できます。属性名をvalueとして使用する場合、@ MyCustomAnnotation(myType = true)の代わりにこの@MyCustomAnnotation(true)のような値を直接渡すことができます。

詳細についてはこの例を参照

1
Dhiral Pandya