2011-09-02 2 views
8
List<Integer> stack = new ArrayList<Integer>(); List<Integer> stack = new ArrayList<Integer>();

Java에서 클래스의 toArray를 나열하십시오. "Integer"목록을 "Integer"배열로 변환 할 수없는 이유는 무엇입니까?

다음과 같은 방법으로 배열로 변환하려고 할 때 :

Integer[] array= stack.toArray(); 

이 예외가 발생합니다.

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
Type mismatch: cannot convert from Object[] to Integer[]. 

왜? 정수와 정수가 정확히 같은 유형입니다. 클래스가 father-and-son relation

 Integer[] array= (Integer[]) stack.toArray(); 

그러나이 오류가 발생합니다.

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer; 

무엇이 문제입니까?

답변

11

지우기 형식 때문에 ArrayList는 런타임시 해당 제네릭 형식을 알 수 없으므로 가장 일반적인 Object [] 만 제공 할 수 있습니다. the other toArray method을 사용해야 원하는 배열 유형을 지정할 수 있습니다.

Integer[] array= stack.toArray(new Integer[stack.size()]); 
1

대신이 작업을 수행 :

Integer[] array = stack.toArray(new Integer[stack.size()]); 

우리는 toArray 방법에 인수로 "씨"배열을 전달해야합니다.

2

그것을 할 수있는 방법은 이것이다 :

기록을 위해
Integer[] array = stack.toArray(new Integer[stack.size()]); 

, 코드가 컴파일되지 않는 이유는 단지 타입 삭제되지 않습니다. 문제는 List<T>.toArray()Object[]을 반환하며 제네릭을 도입하기 전에이 작업을 완료했기 때문입니다.

관련 문제