Object 배열을 강제로 변환할 수 없는 이유

Object 배열을 강제로 변환할 수 없는 이유

  • ArrayList의 오류 사례
  • 이유
  • 오늘 수조의 강제 유형 변환을 진행하다가 이상이 생겼어요.
    Exception in thread “main” java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
    코드를 직접 올리다.

    ArrayList의 오류 사례


    List의 toArray에서 반환된 배열을 강제로 변환할 수 없습니다.
    		List nameList = new ArrayList(2);
            nameList.add("xyn");
            nameList.add("zyn");
            //     ,Object           
            String[] nameArray = (String[])nameList.toArray();
            for (String name : nameArray) {
                System.out.println(name);
            }
    

    올바른 쓰기: ArrayList의 **toArray(T[]a)** 방법을 사용합니다.
    		List nameList = new ArrayList(2);
            nameList.add("xyn");
            nameList.add("zyn");
            //          ,   nameList size
            //         ,          
            String[] nameArray = new String[nameList.size()];
            nameList.toArray(nameArray);
            for (String name : nameArray) {
                System.out.println(name);
            }
    

    까닭


    강제 유형 변환이 성공한 조건은 강제 유형 변환의 실례는 강제 유형 변환 유형의 클래스나 하위 클래스가 필요하다는 것이다.
    1차원 클래스 그룹은 연속적인 주소 인용을 저장하기 때문에 되돌아오는 Object 그룹 중 하나하나를 강제로 변환해도 문제없습니다. 모든 의미는 Object name = new String ("xyn") 이기 때문입니다.밑바닥에는 문제가 없지만nameList.Array () 반환값 형식은 Object 형식으로 정해지고 반환된 그룹이 Object[] 형식인지 확인할 수 있지만 구체적인 형식인지 알 수 없습니다. 메모리에 공간을 개척해야 하기 때문에 강제 형식을String[]로 바꾸는 것도 오류가 발생합니다.
    참조:https://blog.csdn.net/hhhebbb/article/details/88813769

    좋은 웹페이지 즐겨찾기