반응형
java: (문자열[])List.toArray()는 ClassCastException을 제공합니다.
다음 코드(안드로이드에서 실행)는 항상 세 번째 줄에 ClassCastException을 표시합니다.
final String[] v1 = i18nCategory.translation.get(id);
final ArrayList<String> v2 = new ArrayList<String>(Arrays.asList(v1));
String[] v3 = (String[])v2.toArray();
v2가 오브젝트[0]일 때도 발생하며 문자열이 포함되어 있을 때도 발생합니다.왜 그런지 추측이라도?
이것은, 을 사용할 때,
toArray()
오브젝트[]를 반환한다.이 오브젝트는 String[]에 캐스팅할 수 없다(내용은 String이더라도).그 이유는 toArray 메서드에서는
List
가 아니라
List<String>
generic은 소스 코드일 뿐 런타임에는 사용할 수 없기 때문에 작성할 어레이의 유형을 결정할 수 없습니다.
사용하다
toArray(new String[v2.size()]);
적절한 종류의 어레이(String[] 및 적절한 크기의 어레이)를 할당합니다.
잘못 사용하고 있습니다.toArray()
Java의 제네릭은 대부분 통사설탕이라는 것을 기억하세요.ArrayList는 실제로 모든 요소가 String임을 인식하지 않습니다.
문제를 해결하려면 에 문의하십시오.당신의 경우,
String[] v3 = v2.toArray(new String[v2.size()]);
범용화된 폼은toArray(T[])돌아온다T[]따라서 결과를 명시적으로 캐스팅할 필요가 없습니다.
String[] v3 = v2.toArray(new String[0]);
또한 적절한 ArrayType이 메서드에 지정되면 캐스팅할 필요도 없습니다.
사용.toArrayJDK 11 Stream API에서는 다음과 같이 일반적인 문제를 해결할 수 있습니다.
Object[] v1 = new String[] {"a", "b", "c"}; // or array of another type
String[] v2 = Arrays.stream(v1)
.<String>map((Object v) -> v.toString()).toArray(String[]::new);
String[] str = new String[list.size()];
str = (String[]) list.toArray(str);
이렇게 쓰세요.
언급URL : https://stackoverflow.com/questions/5690351/java-stringlist-toarray-gives-classcastexception
반응형
'source' 카테고리의 다른 글
| Amazon RDS에서 CSV 파일로 테이블 내보내기 (0) | 2022.11.22 |
|---|---|
| APT 명령줄 인터페이스와 같은 예/아니오 입력? (0) | 2022.11.22 |
| Python argparse: 기본값 또는 지정된 값 (0) | 2022.11.21 |
| MariaDB 10.4 랜덤 퍼포먼스 저하 (0) | 2022.11.21 |
| Java에서 String.contains() 메서드에서 regex를 사용하는 방법 (0) | 2022.11.21 |