Как сделать ограничение на использование целей аннотации?

Заметил в api где используются аннотации есть некий ограничитель на использование определённых целей аннотаций.

Скажите пожалуйста, как это реализуется.

Например: Использовать цель password нельзя, если отсутствует цель user

Работает:

@User(username = "root", password = "123456")
public static void addUser() { }

Не работает:

@User(password = "123456")
public static void addUser() { }

Ответы (1 шт):

Автор решения: Дмитрий

Мне кажется вы не с той стороны смотрите на проблему. Ограничитель - не то слово, которое правильно описывает ситуацию. Смотрите на это с точки зрения обязательных/необязательных полей. Так, для вашего примера существует обязательное поле username и необязательное password

В итоге при создании аннотации имеем следующую ее реализацию:

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;

@Target(value=ElementType.METHOD)
public @interface User {
     String username();
     String password() default "";
}

Мы определили дефолтное значение для password ключевым словом default (в данном случае это пустая строка, но при необходимости там может быть любое строчное значение), тем самым сделали password необязательным, а username напротив обязательным.

Теперь все работает именно так, как ожидалось.

Данный код работает:

@User(username = "root", password = "123456")
public static void addUser() { }

А этот код уже нет:

@User(password = "123456")
public static void addUser() { }
→ Ссылка