Nice programing

개체 배열을 정수 배열로 캐스팅 오류

nicepro 2020. 11. 20. 09:38
반응형

개체 배열을 정수 배열로 캐스팅 오류


다음 코드의 문제점은 무엇입니까?

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이외의 모든 것이 될 수 있으므로 IntegersJVM은 위 코드가 수행하는 작업을 수행해야합니다 (각 요소를 개별적으로 확인). 언어 디자이너는 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[]
하나를 수행하면 sysoutfalse를 반환합니다.
따라서 캐스팅하기 전에 확인 인스턴스를 시도하면 도움이 될 것입니다. 그래서, 당신도 'instanceof를'체크 추가 할 수있는 오류를 수정하려면
OR
: 코드의 행 다음에 사용하는 객체 배열이 정수가 아닌 다른 어떤 항목이 포함되어있는 경우 위의 코드는 실패 할 것이라고 마십시오 메모를.
(Arrays.asList(a)).toArray(c);

참고 URL : https://stackoverflow.com/questions/1115230/casting-object-array-to-integer-array-error

반응형