개체 배열을 정수 배열로 캐스팅 오류
다음 코드의 문제점은 무엇입니까?
Object[] a = new Object[1];
Integer b=1;
a[0]=b;
Integer[] c = (Integer[]) a;
코드의 마지막 줄에 다음 오류가 있습니다.
스레드 "main"예외 java.lang.ClassCastException : [Ljava.lang.Object; [Ljava.lang.Integer;
Ross, Arrays.copyof () 또는 Arrays.copyOfRange ()도 사용할 수 있습니다.
Integer[] integerArray = Arrays.copyOf(a, a.length, Integer[].class);
Integer[] integerArray = Arrays.copyOfRange(a, 0, a.length, Integer[].class);
타격에 이유가 여기하는 것은 ClassCastException
당신의 배열을 처리 할 수있다 Integer
배열로 Object
. Integer[]
의 하위 유형 Object[]
이지만 Object[]
은 아닙니다 Integer[]
.
그리고 다음도 ClassCastException
.
Object[] a = new Integer[1];
Integer b=1;
a[0]=b;
Integer[] c = (Integer[]) a;
Object
배열을 배열로 캐스트 할 수 없습니다 Integer
. a의 모든 요소를 반복하고 각 요소를 개별적으로 캐스팅해야합니다.
Object[] a = new Object[1];
Integer b=1;
a[0]=b;
Integer[] c = new Integer[a.length];
for(int i = 0; i < a.length; i++)
{
c[i] = (Integer) a[i];
}
편집 :이 제한의 근거는 캐스팅 할 때 JVM이 런타임에 유형 안전성을 보장하기를 원한다는 것입니다. 의 배열은 Objects
이외의 모든 것이 될 수 있으므로 Integers
JVM은 위 코드가 수행하는 작업을 수행해야합니다 (각 요소를 개별적으로 확인). 언어 디자이너는 JVM이 그렇게하는 것을 원하지 않는다고 결정했습니다 (이유는 잘 모르겠지만 좋은 이유라고 확신합니다).
그러나, 당신은 슈퍼 배열에 하위 배열을 캐스팅 할 수 있습니다 (예 Integer[]
에 Object[]
)!
또는 다음을 수행하십시오.
...
Integer[] integerArray = new Integer[integerList.size()];
integerList.toArray(integerArray);
return integerArray;
}
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
Array of Integer로 캐스팅하기 위해 Array of Object를 캐스팅하려고합니다. 당신은 그것을 할 수 없습니다. 이러한 유형의 다운 캐스트는 허용되지 않습니다.
Integer 배열을 만들고 그 후에 첫 번째 배열의 모든 값을 두 번째 배열로 복사 할 수 있습니다.
Java에서 캐스팅이 수행되면 Java 컴파일러와 Java 런타임에서 캐스팅이 가능한지 여부를 확인하고 그렇지 않은 경우 오류를 발생시킵니다.
Object 유형의 캐스팅이 포함 된
instanceof
경우 할당을 진행하려면 테스트를 통과해야합니다. 귀하의 예에서 결과
는 위의 줄 중 Object[] a = new Object[1]; boolean isIntegerArr = a instanceof Integer[]
하나를 수행하면
sysout
false를 반환합니다.
따라서 캐스팅하기 전에 확인 인스턴스를 시도하면 도움이 될 것입니다. 그래서, 당신도 'instanceof를'체크 추가 할 수있는 오류를 수정하려면
OR
: 코드의 행 다음에 사용하는 객체 배열이 정수가 아닌 다른 어떤 항목이 포함되어있는 경우 위의 코드는 실패 할 것이라고 마십시오 메모를.
(Arrays.asList(a)).toArray(c);
참고 URL : https://stackoverflow.com/questions/1115230/casting-object-array-to-integer-array-error
'Nice programing' 카테고리의 다른 글
앵커 태그 안에 앵커 태그 만들기 (0) | 2020.11.20 |
---|---|
플러그인을 초기화 할 수 없습니다 : 인터페이스 org.mockito.plugins.MockMaker (0) | 2020.11.20 |
Java에서 contains ()에 대한 가장 빠른 데이터 구조? (0) | 2020.11.20 |
용어 설명 : 엔티티 "수화": DB에서 속성 가져 오기 (0) | 2020.11.20 |
미래 투자 : Erlang 대 Scala (0) | 2020.11.20 |