2013-03-23 4 views
0

BeanUtils.populate 메서드를 사용하여 String []을 ArrayList로 변환하는 방법은 무엇입니까? ArrayConverter 클래스를 사용할 수있는 것처럼 보이지만 그렇게하는 방법에 대한 설명을 찾는 데 어려움을 겪고 있습니다. 여기 BeanUtils.populate 메서드를 사용하여 String []을 ArrayList <String>으로 변환하려면 어떻게해야합니까?

은 내가 만든 몇 가지 테스트 코드 :

public class TestAction { 
public static TestBean testPopulate() throws IllegalAccessException, InvocationTargetException { 
    HashMap<String, Object> map = new HashMap<String, Object>(); 
    TestBean bean = new TestBean(); 
    String[] names = {"teststring","testboolean","testinteger","testarray"}; 
    String[] array = {"hi","bye"}; 
    Object[] values = {"TEST","","100",array}; 
    int i = 0; 
    while (i < names.length) { 
     String name = names[i]; 
     map.put(name, values[i]); 
     i++; 
    } 
    BeanUtils.populate(bean, map); 

    return bean; 
} 

public static void main(String[] args) { 
    try { 
     TestBean bean = testPopulate(); 
     System.out.println(bean.getTeststring() + " " + bean.getTestinteger() + " " + bean.getTeststring() + " " + bean.isTestboolean()); 
    } catch (IllegalAccessException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (InvocationTargetException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
} 

public class TestBean { 
private String teststring; 
private boolean testboolean; 
private int testinteger; 
private ArrayList<String> testarray; 

public String getTeststring() { 
    return teststring; 
} 
public void setTeststring(String teststring) { 
    this.teststring = teststring; 
} 
public boolean isTestboolean() { 
    return testboolean; 
} 
public void setTestboolean(boolean testboolean) { 
    this.testboolean = testboolean; 
} 
public int getTestinteger() { 
    return testinteger; 
} 
public void setTestinteger(int testinteger) { 
    this.testinteger = testinteger; 
} 
public ArrayList<String> getTestarray() { 
    return testarray; 
} 
public void setTestarray(ArrayList<String> testarray) { 
    this.testarray = testarray; 
} 

} 

나는 []는 ArrayList와로 변환하는 방법을 알고 기대 입력 문자열을 전달하지만 실패합니다.

답변

2

이 내가 '돈으로 범용 답변입니다 일반적으로 콩을 사용합니다. BeanUtils 은이 케이스를 처리해야하지만 일 수는 있지만 놀랄 것입니다.

문자열의 배열은 ArrayList 개체와 유사하지 않지만 유사합니다. 수행 할 수있는 여러 가지 논리적 인 방법이 있기 때문에 일반적으로 하나에서 다른 것으로 암시 적으로 변환하는 것은 좋지 않습니다.

  • 당신은 배열을하고 래퍼 List 개체를 반환 Arrays.asList()를 사용할 수 있습니다. ArrayList이 아니라는 점에 유의하십시오. 전달 된 배열과 직접 인터페이스하는 것은 고정 크기 사용자 지정 구현 List입니다. 즉, 새 저장소를 할당 할 필요가 없음을 의미합니다. 당신이 정말 ArrayList을 원하지 않는 대신하는 경우

  • , 당신은 당신이받은 List 개체를 기반으로 새로운 구성 할 수 있습니다 :가 새 스토리지 배열을 할당 않습니다

    ArrayList<String> ls = new ArrayList<String>(Arrays.asList(myArray)); 
    

    이 호출 를하지만, 경우 당신은 조정 가능한 크기를 원한다면 그 O (n) 비용을 받아 들여야 만합니다. 이 선택해야 구현 - 사용 사례에 따라 동등하게 유효한 둘 다

이 두 가지 가능한 선택은 여러분의 빈은 암시 적으로 List로 배열을 변환하는 것이 나쁜 아이디어라고 이유를 정확히 ? 크기를 조정하려고하면 예외를 throw하는 빠른 것이고 그렇지 않으면 느린 것입니다.

가능한 경우 유형 변환에 대해 명시해야합니다. 겉만 번지기/불쾌한 것처럼 보이지만 이것은 Java의 가장 강력한 기능 중 하나입니다.

+0

이제 알았습니다. String []을 ArrayList 으로 변경했으며 코드가 오류없이 실행되었습니다. String []에서 ArrayList 으로 변환 할 때 BeanUtils가 의도적으로 실패합니다. Java의 HttpServletRequest 클래스가 String 또는 String [] 유형을 반환하기 때문에 추가 질문으로서, 그렇다면 bean에서 원시 유형과 String [] 유형 만 사용하도록해야합니까? – user2191540

+0

'HttpServletRequest'의 어떤 메소드가 있습니까? bean에 전달 된 데이터의 타입이'String []'이라면, bean에서 배열을 사용하고, 그것을'List' 객체로 변환하는 것이 타당 할 것입니다. 너 필요해. 또는 사전 처리를 수행하십시오. Map을 BeanUtils.populate에 전달하기 전에, 당신이 사용하고자하는'List' 객체를 생성하고 대신 맵에 넣으십시오. – dimo414

+0

아 ...전처리는 내가 그것을 시도 할 좋은 생각이다. 제안 해줘서 고마워. – user2191540

1

당신은 정확하게 코드에 실패하지만 여기에 문자열 배열이 제 3 자 유틸리티없이 목록으로 변환하는 방법이 무엇인지 언급하지 않았다 :

Arrays.asList(new String[] {"aaa", "bbb", "ccc"})