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 clazz, List list) {
//생성하길 원하는 객체의 Class
if (clazz == null) return null;
//데이터가 들어있는 List
if (list == null || list.size() == 0) return 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]);
}
}
}
'IT, 인터넷 > JAVA, 스프링부트' 카테고리의 다른 글
자바 좌표값을 랜덤으로 뽑아서 오브젝트 충돌이 되는지 확인 (0) | 2021.09.30 |
---|---|
자바 피쉬 게임 만들기 (0) | 2021.09.30 |
자바 과목의 점수로 합계, 평균, 등수 구하기 (0) | 2021.09.29 |
자바 Scanner로 숫자 10개 입력 받아 합 구하기 (0) | 2021.09.29 |
자바 Scanner 이용해서 회문수 구하기 (0) | 2021.09.29 |