반응형
개발을 하다 보면 프로그램 내에서 class안의 모든 변수명을 알아야 하는 경우가 있습니다.
물론 super class(부모 클래스)를 포함해서요.
다음과 같은 방법이 있습니다.
먼저, 방법을 알아보기 앞서 클래스를 생성합니다.
public class ParentClass {
private String field1;
private String field2;
private String field3;
}
public class ChildClass extends ParentClass {
private String field4;
private String field5;
private String field6;
public String field7;
}
방법 1. getDeclaredFields()을 사용한 방법.
getDeclaredFields()는 현재 클래스의 모든 field를 구할 수 있습니다. 하지만 이 method는 super class의 field는 알 수 없습니다. 따라서 super class를 찾을 수 없을 때까지 반복문을 사용합니다.
또한 아래 예제는 java 8부터 지원하는 람다식을 사용한 방법입니다.
public class Test {
public static void main(String[] args) {
Class<?> current = ChildClass.class;
while(current.getSuperclass()!=null){
Arrays.stream(current.getDeclaredFields()).forEach(field -> {
System.out.println(field.getName());
});
current = current.getSuperclass();
}
}
}
방법2. ReflectionUtils.doWithFields(baseClass, FieldCallback) 사용
Spring Framework을 사용한다면 ReflectionUtils.doWithFields를 사용하여 간단하게 모든 field를 찾을 수 있습니다.
public class Test {
public static void main(String[] args) {
ReflectionUtils.doWithFields(ChildClass.class, field -> {
System.out.println(field.getName());
});
}
}
728x90
반응형
'back end > java' 카테고리의 다른 글
spring boot restful api에서 대용량 엑셀 다운로드 (0) | 2022.11.14 |
---|---|
[java] 특정 범위 내에서의 임의의 정수 생성하는 방법 (0) | 2022.11.13 |
[java] hMailServer를 사용한 메일 전송 방법 (0) | 2022.11.09 |
[java] JSON string을 이쁘게 출력하는 방법 - json string pretty print (0) | 2022.10.23 |
[Spring Boot] DB설정 없이 실행하는 방법 (0) | 2022.10.21 |