[英]How to dynamically define the Class that can be used as a parameter in a method?
我有一个方法用于验证Spring MVC中的POJO(这允许我依赖POJO中的@Annotation
,同时在不使用注释@Valid
情况下随时随地以编程方式验证POJO)。
需要将对象的Class传递给方法才能验证:
public void validate(Class clazz, Object model, BindingResult result){
...
Set<ConstraintViolation<clazz>> constraintViolations=validator.validate((clazz)model);
for (ConstraintViolation<clazz> constraintViolation : constraintViolations) {
...
}
我的代码不正确,因为得到错误:
clazz无法解析为某种类型
我应该如何编辑我的代码,以便能够将任何我想要的类传递给此方法?
谢谢
您可以generify
方法
public <T> void setList(Class<T> clazz){
List<T> list = new ArrayList<>();
}
并将其称为如下
setList(Person.class)
你应该使用泛型:
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) {
...
}
我猜你不需要类型,可以使用未绑定的通配符:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.