2014-11-29 3 views
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하지 않고 그들을 설정 열거의 목록을 만들 수있을 수없는 것.

답변

0

setter에 잘못된 유형의 배열이 전달 된 것 같습니다 (예 : '. pd.getWriteMethod()를 호출 (POJO, OBJS)'

public void setMyEnumArray(MyEnum[] array) {...} 

다음의 전화가 유사 할 것입니다 : 당신은 콩 세터가 당신은 개체를 변환해야한다, 따라서

Object[] objs = new Object[values.size()]; 
... 
pojo.setMyEnumArray(objs); 

을 [] 이 Setter를 호출하기 전에 MyEnum []에 입력하십시오.

Object[] objs = new Object[values.size()]; 
... 
objs = Arrays.copyOf(objs, objs.length, (Class) pd.getPropertyType()); 
pd.getWriteMethod().invoke(pojo, objs); 
관련 문제