본문 바로가기

IT, 인터넷/JAVA, 스프링부트

java.lang.reflect.Array를 이용한 배열 생성

반응형

java.lang.reflection 패키지의 클래스들을 보면 클래스에 대한 구체적인 정보 없이 메타 데이터만으로도 프로그래밍이 가능하다는 것을 알 수가 있다.

대부분의 프레임워크에서 이런 java.lang.reflection 패키지의 기능들을 사용하고 있음은 말할 것도 없다.

 

java.util.List 클래스를 원하는 클래스의 배열로 바꿔야 할 필요가 있을때 그러기 위해 java.lang.reflection.Array 클래스를 사용합니다

ReflectionArrayTest.java 라는 파일을 만들고 아래와 같이 타이핑을 합니다

 

소스코드

import java.lang.reflect.Array;

import java.util.ArrayList;

import java.util.List;

 

//데이터 빈

class Bean {

    private int num;

    private String str;

    

    public int getNum() {

      return num;

    }

    public void setNum(int num) {

      this.num = num;

    }

    public String getStr() {

      return str;

    }

    public void setStr(String str) {

      this.str = str;

    }

    public String toString() {

      return num+":"+str;

    }

}

 

public class ReflectionArrayTest {

 

    public static Object[] listToArray(Class clazzList list) {

        //생성하길 원하는 객체의 Class

        if (clazz == nullreturn null;

        //데이터가 들어있는 List

        if (list == null || list.size() == 0return null;

       

        //원하는 Class로 배열 생성

 

        //파리미터로 Class, 배열 사이즈 입력

        Object[] objects = (Object[])Array.newInstance(clazz, list.size());

       

        //배열에 List의 값 할당

 

        for (int i=0, j=list.size(); i < j; i++) {

 

          //파라미터로 객체 배열, 인덱스, 데이터 입력

          Array.set(objects, i, list.get(i));

        }

       

        //배열 리턴

        return objects;

      }

     

      public static void main(String[] args) {

        //List 생성

        List list = new ArrayList();

        for (int i=0; i<5; i++) {

          Bean bean = new Bean();

          bean.setNum(i+1);

          bean.setStr("s"+(i+1));

          list.add(bean);

        }

       

        //Object 배열로 받아서 그대로 사용

        Object[] objects = ReflectionArrayTest.listToArray(Bean.class, list);

        for (int i=0, j=objects.length; i < j; i++) {

          Bean bean = (Bean)objects[i];

          System.out.println(bean);

        }

       

        System.out.println("==========");

       

        //원하는 객체 배열로 생성된 것인지 Casting하여 사용

        Bean[] beans = (Bean[])ReflectionArrayTest.listToArray(Bean.class, list);

        for (int i=0, j=beans.length; i < j; i++) {

          System.out.println(beans[i]);

        }

      }

}

 

반응형