如何动态定义可用作方法中参数的类?

时间:2015-11-28 21:34:34

标签: java arraylist

我有一个方法用于验证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无法解析为类型

如何编辑我的代码以便能够将任何我想要的类传递给此方法?

谢谢

3 个答案:

答案 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

相关问题