Не могу создать универсальный валидатор javax только для Enum - PullRequest
0 голосов
/ 07 октября 2019

Я пытаюсь определить аннотацию проверки для полей Enum как можно более общей (т. Е. Работать только с типом поля Enum и для всех типов Enum).

Цель состоит в том, чтобы иметь аннотацию, котораяавторизует только некоторые значения в перечислении.

Я создал аннотацию следующим образом:

@Target({ FIELD })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = { EnumRestreintValidator.class })
public @interface EnumRestreint {
    String message() default "The field value is not included in the authorized values.";

    String[] authorizedFields() default {};

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}

Затем валидатор:

public class EnumRestreintValidator<T extends Enum<T>> implements ConstraintValidator<EnumRestreint, T> {

    Set<T> validFields;

    @Override
    public void initialize(EnumRestreint constraint) {
        validFields = Arrays.stream(constraint.authorizedFields()).collect(Collectors.toSet());
    }

    @Override
    public boolean isValid(T enumValue, ConstraintValidatorContext constraintValidatorContext) {
        return false; // Not implemented yet
    }
}

Пример использования:

@EnumRestreint(authorizedValues = { "BANANA", "APPLE" })
private Fruits value; // validator should break if value == Fruits.ORANGE

Я хочу получить доступ к аннотированному полю enum без включения класса enum в параметры аннотации. Поэтому я попытался сделать универсальный валидатор.

Но я получаю эту ошибку компиляции в определении аннотации:

@Constraint(validatedBy = { EnumRestreintValidator.class })
// Type mismatch: cannot convert from Class<EnumRestreintValidator> to Class<? extends ConstraintValidator<?,?>>

Можно ли использовать универсальный валидатор, так как ясобираешься делать? Или я вынужден передать тип перечисления в параметрах аннотации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...