我有一个方法用于验证Spring MVC中的POJO(这允许我依赖POJO中的@Annotation
,同时在任何时间和地点以编程方式验证POJO而不使用注释@Valid
)。
需要将对象的Class传递给方法才能验证:
public void validate(Class clazz, Object model, BindingResult result){
...
Set<ConstraintViolation<clazz>> constraintViolations=validator.validate((clazz)model);
for (ConstraintViolation<clazz> constraintViolation : constraintViolations) {
...
}
我的代码不正确,因为得到错误:
clazz无法解析为类型
如何编辑我的代码以便能够将任何我想要的类传递给此方法?
谢谢
答案 0 :(得分:4)
您可以generify
方法
public <T> void setList(Class<T> clazz){
List<T> list = new ArrayList<>();
}
并按如下方式调用
setList(Person.class)
答案 1 :(得分:2)
你应该使用泛型:
public <T> void setList(){
List<T> list = new ArrayList<>();
}
...
obj.<Man>setList();
obj.<Woman>setList();
obj.<Person>setList();
或
public <T> void setList(Class<T> clazz){
List<T> list = new ArrayList<>();
}
...
obj.setList(Woman.class);
obj.setList(Man.class);
obj.setList(Person.class);
或
public static class MyClass <T> {
public <T> void setList() {
List<T> list = new ArrayList<>();
}
}
...
new MyClass<Woman>().setList();
new MyClass<Man>().setList();
new MyClass<Person>().setList();
<强>更新强> 而不是代码
public void validate(Class clazz, Object model, BindingResult result){
...
Set<ConstraintViolation<clazz>> constraintViolations=validator.validate((clazz)model);
for (ConstraintViolation<clazz> constraintViolation : constraintViolations) {
...
}
使用代码
public void <T> validate(Class<T> clazz, Object<T> model, BindingResult result){
...
Set<ConstraintViolation<T>> constraintViolations=validator.validate(model);
for (ConstraintViolation<T> constraintViolation : constraintViolations) {
...
}
答案 2 :(得分:2)
我猜你不需要类型,可以使用未绑定的通配符:
public void validate(Class<?> clazz, Object model, BindingResult result){
...
Set<ConstraintViolation<?>> constraintViolations=validator.validate(model);
for (ConstraintViolation<?> constraintViolation : constraintViolations) {
...
}
https://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html