java接口而不是实现

时间:2011-06-20 19:57:35

标签: java spring interface

我有一个给定参数的方法:

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);

但我不能这样做。这里有什么解决方案?

由于

2 个答案:

答案 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的通用?