이 기사는 Java의 목록 및 배열 변경 방법을 분석합니다. 참조를 위해 모든 사람을 위해 공유하십시오. 세부 사항은 다음과 같습니다.
오늘 나는 이상한 문제가 발생하지 않습니다. 다음과 같이 :
ArrayList <string> list = new ArrayList <string> ();
이런 식으로 코드를 작성하는 데 아무런 문제가 없어야하며 문제가 없다고 생각합니다. 그러나 특정 작업이 실행될 때 다음과 같이 보고서는 비정상적입니다. 스레드의 예외 "main"java.lang.classcastException : [ljava.lang.object;
그러나 다음과 같은 글쓰기에 문제가 없습니다.
ArrayList <string> list = strings 문자열 [] = for (int i = 0, j = list.size (); list.get (i);}
우리는이 현상을 설명 할 수 있습니다. Java는 상향 및 하향 변환을 허용하지만, Java 가상 머신 의이 객체의 유형에 따라이 변환이 성공적인지 여부. Java Virtual Machine은 각 객체의 유형을 저장합니다. 배열도 객체입니다. 배열 유형 [ljava.lang.object. [ljava.lang.object는 [ljava.lang.string으로 변환하는 것은 분명히 불가능하며, 이것은 하향 변환이기 때문에, 이것은 배열의 요소가 요소임을 보장 할 수 없기 때문입니다. 배열은 배열의 요소 이므로이 변환은 성공할 수 없습니다. 배열의 요소는 스토리지의 특정 요소가 아닌 요소의 참조 일 뿐이므로 배열의 요소 유형은 여전히 Java Virtual Machine에 저장됩니다.
위의 설명에 따르면이 문제를 다음 모델로 요약 할 수 있습니다.
Object objs [] = 새로운 객체 [10];
이것은 위의 편집과 동일합니다. 이 코드를 다음과 같이 수정하면 다음과 같이
문자열 strs [] = 새로운 문자열 [10];
이것은 컴파일하고 통과 할 수 있습니다. 따라서이 문제를 Java 변환 규칙의 문제로 생각할 수 있습니다. 모델에서 Java 배열의 지원에 대해 이야기합시다.
JDK5는 이미 모델 유형에 대한 지원을 가지고있어 수집 및 맵에서 데이터 유형의 보안을 보장 할 수 있지만 목록의 ToArray 메소드는 매우 혼란 스럽습니다. 개인적으로 모델에 따라 해당 t []를 반환해야합니다. JDK의 소스 코드를 자세히 살펴보고 해당 목록에 배열로 변환하는 두 가지 방법이 있습니다.
공개 대상 [] toArray ();
이 메소드는 목록의 모든 요소를 동일한 크기의 배열로 리턴하고 배열의 모든 요소는 객체 유형입니다.
공개 <t> t [] toArray (t [] a);
이 메소드는 목록의 모든 요소를 동일한 크기의 배열로 리턴하고 배열의 모든 요소를 T 유형입니다.
Java 컴파일러는 새로운 모델 배열을 가질 수 없기 때문에 목록이 설계되었습니다. 즉, 다음과 같은 배열을 정의 할 수 없습니다.
t arr = new t [size];
그러나 t []를 사용하여 배열을 나타내고 배열을 t []로 변환 할 수 있습니다. 예를 들어, 목록의 공개 <t> t [] toArray (t [] a)가 실현됩니다.
public <t> t [] toArray (t [] a) {if (a.length <size) a = (t []) java.lang.reflect.array.newinstance (a.getClass (). getComponentType (), getComponentType (), system.arraycopy (a.length> size) a [size] = return a.
위의 코드 에서이 배열의 유형을 알지 못하기 때문에 반사 메커니즘 (a.getClass (). getComponentType () 메소드를 통해이 배열을 만들어 배열 요소 유형을 얻음)를 통해 볼 수 있습니다.
결국, 목록은 배열로 변환하여 처리합니다.
ArrayList <string> list = strings = new String [list.size ()];
반대로 배열을 목록으로 변환하려면 어떻게해야합니까? 다음과 같이 :
문자열 [] s = { "a", "b", "c"};
이 기사는 모든 사람의 Java 프로그램 설계에 도움이되기를 바랍니다.