Пользовательская аннотация Java: сделать атрибут необязательным - PullRequest
60 голосов
/ 31 августа 2009

Я определил свою собственную аннотацию

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

как, если это вообще возможно, сделать атрибут необязательным

Ответы [ 3 ]

94 голосов
/ 31 августа 2009

Вы можете предоставить значение по умолчанию для атрибута:

@Target(value={ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation  {
    Class<?> myType() default Object.class;
}
3 голосов
/ 31 августа 2009

Нашел это. Это не может быть необязательным, но по умолчанию можно объявить так:

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

Если никакое значение по умолчанию не имеет смысла как «пустое» значение, тогда это проблема.

1 голос
/ 13 октября 2013

Для необязательного атрибута вам нужно указать значение по умолчанию для этого атрибута, вы можете указать значение по умолчанию, используя ключевое слово "default".

Примечание: только для одного атрибута вы можете использовать имя атрибута как значение . Если вы используете имя вашего атрибута как значение , вы можете напрямую передать значение, например, @MyCustomAnnotation (true) вместо @MyCustomAnnotation (myType = true).

См. Этот пример для получения более подробной информации

...