我想创建一个动态数组类来传递给vararg。这可能吗?如果没有,动态创建正常的类数组的最佳方法是什么?下面的代码给出了后面的错误。
代码 -
private void validate(Validator vt, Object form, BindingResult errors, Class<?>... c){
vt.validate(form, c);
}
private void validate(Type type, BindingResult errors){
Validator vt = new Validator();
List groups = new ArrayList();
if(form.isAvailable()){
groups.add(Available.class);
}
if(form.isNotAvailable()){
groups.add(NotAvailable.class);
}
if(groups.size()>0){
validate(vt, form, errors, groups.toArray());
}
}
错误 -
The method validate(Validator, Object, BindingResult, Class<?>...) is not applicable for the arguments (Validator, Field, BindingResult, Object[])
答案 0 :(得分:2)
List.toArray()
返回的数组是Object [],无法强制转换为Class []。请尝试使用这样的List.toArray(T[])
:groups.toArray(new Class<?>[groups.size()])
,它应该返回您正在寻找的数组类型。
答案 1 :(得分:1)
尝试将List和ArrayList参数化为
列表与LT;类&LT; ? &GT; &GT; groups = new 的ArrayList&LT;类&LT; ? &GT; &GT;();
同样,在转换为数组时,请使用:
groups.toArray(new Class [ groups.size()]);
答案 2 :(得分:0)
就这样做
private void validate(ValidationTool vt, Object form, BindingResult errors, Class[] c){
vt.validate(form, c);
}