Java 是否可以对两个不同的类使用类级自定义约束注释

Java 是否可以对两个不同的类使用类级自定义约束注释,java,hibernate,validation,javabeans,Java,Hibernate,Validation,Javabeans,我有下一个约束注释: @Target({TYPE, ANNOTATION_TYPE}) @Retention(RUNTIME) @Constraint(validatedBy = PhoneOrEmailPresentedValidator.class) @Documented public @interface PhoneOrEmailPresented { String message() default "Either phone or email should be

我有下一个约束注释:

@Target({TYPE, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = PhoneOrEmailPresentedValidator.class)
@Documented
public @interface PhoneOrEmailPresented {

    String message() default "Either phone or email should be presented";

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

    Class<? extends Payload>[] payload() default {};
}
public class PhoneOrEmailPresentedValidator implements ConstraintValidator<PhoneOrEmailPresented, RequestDto> {

    @Override
    public boolean isValid(RequestDto value, ConstraintValidatorContext context) {
        String email = value.getEmail();
        String phone = value.getPhone();

        return (email != null && !email.isEmpty()) ||
               (phone != null && !phone.isEmpty());
    }

    @Override
    public void initialize(PhoneOrEmailPresented constraintAnnotation) {
        // NOP
    }
}
@Target({TYPE,ANNOTATION\u TYPE})
@保留(运行时)
@约束(validatedBy=PhoneOrEmailPresentedValidator.class)
@记录
public@interface PhoneOrEmailPresented{
String message()默认值“应显示电话或电子邮件”;
类[]组()默认值{};

类由于在验证API中找不到任何方法,因此使用反射解决了问题(借助类
org.apache.commons.lang3.reflect.FieldUtils
,Java也可以这样做):

        String email, phone;

        try {
            Field emailField = FieldUtils.getField(value.getClass(), "email", true);
            Field phoneField = FieldUtils.getField(value.getClass(), "phone", true);
            email = (String) emailField.get(value);
            phone = (String) phoneField.get(value);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
            return false;
        }