Самый элегантный способ - использовать проверка бинов JSR 380 .
Это набор инструментов, включая полезные общие аннотации , для определения метаданных класса бина для проверки ограничения.
Вам не нужно читать полную спецификацию, чтобы понять суть:
Вы хотите определить групповой класс для этого конкретного набора ограничений
public interface MyCustomIsEmpty{}
Затем аннотируйте каждое соответствующее поле с помощью
@Max(value = 0, groups = { MyCustomIsEmpty.class })
@Min(value = 0, groups = { MyCustomIsEmpty.class })
убедитесь, что используются классы аннотаций javax.validation.constraints
.
Теперь ваш фактический isEmpty () будет таким же простым, как получение валидатора по умолчанию и проверка текущего экземпляра:
public boolean isEmpty() {
// Gets validator instance from factory
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
// Validates 'this' using only fields belonging to the MyCustomIsEmpty group
Set<ConstraintViolation<MyClass>> constraintViolations = validator.validate(this, MyCustomIsEmpty.class);
// there are lots of fancy things you could do but this covers your case
return constraintViolations.isEmpty();
}
Вы можете упростить эквивалент двух объединенных аннотаций в одну пользовательскую для меньшей детализации. Это описано в спецификации.