1. Java 的static 方法无法访问泛型类的类型参数,所以如果static 方法需要使用泛型能力,就必须使其称为泛型方法。
public class DomainObjectValidator { private static final Logger LOGGER = LoggerFactory.getLogger(DomainObjectValidator.class); public static Validator getInstance() { ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); return factory.getValidator(); } public static <T> boolean isDomainObjectValid(T object) { boolean result = true; if (object != null) { Set<ConstraintViolation<T>> constraintViolations = getInstance().validate(object); if (constraintViolations.size() > 0) { result = false; for (ConstraintViolation violation : constraintViolations) { LOGGER.info("filed={}, msg={}, currentValue={}.", violation.getPropertyPath().toString(), Objects.toString(violation.getMessage()), Objects.toString(violation.getInvalidValue()) ); } } } return result; } public static <T> Set<ValidateMessage> validateDomainObject(T object) { Set<ValidateMessage> validateMessageSet = new HashSet<>(); if (object != null) { Set<ConstraintViolation<T>> constraintViolations = getInstance().validate(object); if (constraintViolations.size() > 0) { for (ConstraintViolation violation : constraintViolations) { ValidateMessage message = new ValidateMessage( violation.getPropertyPath().toString(), Objects.toString(violation.getMessage()), Objects.toString(violation.getInvalidValue()) ); validateMessageSet.add(message); } } } return validateMessageSet; } }