0
나는 csv를 pojo로 읽는 작은 도우미 유틸리티를 가지고 있습니다. 대부분의 경우 그것은 정말로 잘 작동합니다. 이제 열거 형에 문제가 있습니다.enum 배열을 설정하십시오
나는 채울 수 있어요 :
- 열거
- 열거
- 배열
의 목록하지만 열거 형의 배열에 문제가 있습니다. 다음은 이러한 특별한 경우 일부의 코드입니다 : 내가 열거를 생성하는 다른 접근을 시도
public void fillPojo(Object pojo) {
// use setter/getter as well - using beanutils
for(PropertyDescriptor pd : PropertyUtils.getPropertyDescriptors(pojo.getClass())) {
if(pd.getName().equals("class")|| pd.getReadMethod() == null)
continue;
// get the value (based on the property name)
String value = this.get(pd.getName());
if(value == null || value.equals("null"))
continue;
try {
// this works for normal lists and list of any enum
if(pd.getPropertyType().isAssignableFrom(List.class)) {
List<String> values = new ArrayList<>();
for(String s : value.split(","))
values.add(s);
pd.getWriteMethod().invoke(pojo, ConvertUtils.convert(values, pd.getPropertyType()));
}
else if(pd.getPropertyType().isArray()) {
///////////////////////// this throws a conversionException
List<String> values = new ArrayList<>();
for(String s : value.split(","))
values.add(s);
Object[] objs = new Object[values.size()];
for(int i = 0; i < objs.length; i++) {
if(StringUtils.isBlank(values.get(i)))
objs[i] = null;
else {
objs[i] = ConvertUtils.convert(values.get(i), pd.getPropertyType().getComponentType());
}
}
pd.getWriteMethod().invoke(pojo, objs);
/////////////////////////
}
else
if(pd.getPropertyType().isEnum()) {
if(StringUtils.isEmpty(value) || "null".equalsIgnoreCase(value))
pd.getWriteMethod().invoke(pojo, (Object)null);
else
pd.getWriteMethod().invoke(pojo, Enum.valueOf(pd.getPropertyType().asSubclass(Enum.class), value));
}
else
pd.getWriteMethod().invoke(pojo, ConvertUtils.convert(value, pd.getPropertyType()));
} catch (NullPointerException | IllegalAccessException | IllegalArgumentException
| ConversionException | InvocationTargetException e) {
System.err.println("'" + pojo.getClass().getSimpleName() + "' Problem while setting: " + pd.getName() + " with value " + value + " type: " + pd.getPropertyType().getSimpleName() + ":" + e.getMessage());
e.printStackTrace();
}
}
은,하지만 난 제대로 예외를 throw하지 않고 그들을 설정 열거의 목록을 만들 수있을 수없는 것.