2012-04-02 6 views
3

나는이 나에게 클래스 캐스트 예외를 제공합니다 않는 이유를이캐스트가 실패하는 이유는 무엇입니까?

List<String> stringList = new ArrayList<String>(); 
stringList.add("one"); 
stringList.add("two"); 
stringList.add("three"); 

(String[]) stringList.toArray(); 

을하려고?

Caused by: java.lang.ClassCastException: [Ljava.lang.Object; 
+0

궁극적으로 어레이가 필요한 경우 왜 arraylist를 사용합니까? 배열로 시작하여 배열에 요소를 추가하고 – Baz1nga

답변

7

더 나은이 다른 method 시도 : 반환 된 배열은 당신이 필요로하는 정확한 유형, 필요하지 캐스트입니다 그런 식으로

String[] stringArray = stringList.toArray(new String[stringList.size()]); 

합니다. methodString[]이 아니라 Object[]을 반환하며 수행하려는 캐스트가 유효하지 않습니다.

+1

을 추가하고 새 문자열 [stringList.size()]를 사용하는 것이 더 좋습니다. –

+0

@ Eng.Fouad 좋습니다, 제안 사항을 수정했습니다. –

9

코드가 실패하는 이유는 .toArray()Object[] 유형의 배열을 반환하기 때문에 String[]으로 캐스트 할 수 없기 때문입니다. 이 문제를 해결하려면 다른 toArray(T[] a)

stringList.toArray(new String[0]);

+1

+1 광산보다 훨씬 낫다. –

2

당신은 String 배열로 캐스팅 할 수 없습니다 사용합니다. 원하는 항목 :

String [] test = stringList.toArray (new String [stringList.size()]);

3

List 클래스의 toArray() 방법은 Object[]하지 String[]를 반환하기 때문에, 당신은 String[]Object[]에서 캐스팅 수 없습니다. 그러나, 그것을 할 올바른 방법은 다음과 같습니다

String[] array = new String[stringList.size()]; 
stringList.toArray(array); 

나 :

String[] array = stringList.toArray(new String[stringList.size()); 
2

ArrayList<T>.toArray() 방법은 유형 Object의 배열을 반환, 즉 할 수있는 충분히 수용 할 일이기 때문이다. 사실, 유형 삭제 때문에, 그것이 할 수있는 유일한 방법입니다.

String 배열을 가져 오려면 ArrayList<T>.toArray(T[]) 메서드를 호출하십시오. 귀하의 경우에는, 당신은 이런 식으로 부를 것이다 :

stringList.toArray(new String[3]); 

제공된 String 배열에 ArrayList 내용을 채울 것처럼 호출.

관련 문제