我有一个给定参数的方法:
public static Map<String, String> validationMessages(Set<ConstraintViolation<EditEmailForm>> failures)
现在我想添加另一个表单,所以我用Form接口包围我的所有表单并实现它,并将方法更改为:
public static Map<String, String> validationMessages(Set<ConstraintViolation<Form>> failures)
现在在我的控制器中我尝试使用这样的方法:
首先我创建一个失败对象,并进行验证
Set<ConstraintViolation<EditEmailForm>> failures = validator.validate(editEmailForm);
然后尝试将其传递给validationMessages方法:
return FormUtils.validationMessages(failures);
但我不能这样做。这里有什么解决方案?
由于
答案 0 :(得分:0)
将方法中的声明更改为
public static Map<String, String> validationMessages(Set<ConstraintViolation<? extends Form>> failures)
如果这没有用,请提供更多详情
答案 1 :(得分:0)
这个问题来自java-generics不协变的事实。看看这个细节
http://www.ibm.com/developerworks/java/library/j-jtp01255/index.html
想想这个案子。
B延伸A.
你调用这个方法
void someMethod(Set<A> as) {
as.add(new A());
}
与
Set<B> bs = new HashSet<B>();
someMethod(bs);
这会编译,你可以将A添加到B的集合中。
至于你的具体问题。为什么你甚至将Form-Class作为ConstraintViolation的通用?