我有这段代码:
FVDTO.setStatus("fail");
List<String[]> invalidFields = new ArrayList<String[]>();
Iterator<ConstraintViolation<HazardSubmission>> iterator = cv.iterator();
while(iterator.hasNext()) {
ConstraintViolation<HazardSubmission> i = iterator.next();
String property = i.getPropertyPath().toString();
String message = i.getMessage();
invalidFields.add(new String[] { property, message });
}
FVDTO.setInvalidFields(invalidFields);
return new JsonResolution(FVDTO);
我已经采取了一些措施来保持干燥,所以我可以将它与其他类一起使用,即HazardSubmission是一类,还有其他类。以下代码显示了我的尝试,显然在此处手动转换<HazardSubmission>
无效,需要像o.getClass();
public static List<String[]> GetInvalidProperties(Set<ConstraintViolation<Object>> cv, Object o) {
List<String[]> invalidFields = new ArrayList<String[]>();
Iterator<ConstraintViolation<HazardSubmission>> iterator = cv.iterator();
while(iterator.hasNext()) {
ConstraintViolation<HazardSubmission> i = iterator.next();
String property = i.getPropertyPath().toString();
String message = i.getMessage();
invalidFields.add(new String[] { property, message });
}
}
第二个代码块失败了,因为我真的不知道我在做什么,我想传递用于param 1的cv,使用一般对象类型,然后以某种方式将该类型作为第二个参数传递。 / p>
请问有人请解释如何做到这一点?
答案 0 :(得分:1)
我认为您可能正在寻找通用方法
public static <T> List<String[]> GetInvalidProperties(Set<ConstraintViolation<T>> cv){
Iterator<ConstraintViolation<T>> iterator = cv.iterator();
while(iterator.hasNext()) {
ConstraintViolation<T> i = iterator.next();
String property = i.getPropertyPath().toString();
String message = i.getMessage();
invalidFields.add(new String[] { property, message });
}
}
如果所有T都扩展了给定的类或接口,你甚至可以说
public static <T extends MyClassOrInterface> List<String[]> GetInvalidProperties(Set<ConstraintViolation<T>> cv){
//...
}
答案 1 :(得分:0)
cv.iterator()
会返回Iterator<ConstraintViolation<Object>>
,您需要Iterator<ConstraintViolation<HazardSubmission>>
。这样做是因为cv定义为Set<ConstraintViolation<Object>>
。如果你想要一个通用的方法,你可以改变
Set<ConstraintViolation<Object>> cv
到
Set<ConstraintViolation<? extends Object>> cv
以这种方式编译代码。