【发布时间】:2014-03-24 08:42:36
【问题描述】:
我正在使用 javax.validation / Hibernate 验证。 为了验证带注释的(例如属性上的@NotNull)bean,hibernate 验证器与 javax.validation 接口一起使用:
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
public interface Validator {
<T> Set<ConstraintViolation<T>> validate(T object, Class<?>... groups);
}
public interface ConstraintViolation<T> {
String getMessage();
Path getPropertyPath();
T getRootBean();
}
目标是编写一个方法,它接受不同类型的集合,例如:
Set<ConstraintViolation<TaskList>> violationsTaskList = validator.validate(taskList);
Set<ConstraintViolation<TaskItem>> violationsTaskItem = validator.validate(taskItem);
public void consumeViolations(Set<ConstraintViolation<?> violations) {
// Do something meaningful...
violations.getMessage();
}
使用通配符 ?最好认为我到现在为止都想出了,但编译器拒绝了它并显示以下消息:
consumeViolations(....<?>) cannot be applied to consumeViolations(....<TaskList>)
我不想为每个类型 T 编写此方法只是为了调用 getMessage() 并将其传递给下一个方法。
这样的方法可以写吗?我只想访问 ConstraintViolation 接口的方法,这些方法不依赖于类型 T,如 String getMessage()。
【问题讨论】:
标签: java generics hibernate-validator