반응형
라이브러리를 안써서 직접 구현
package com.gsr.base;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class CmmUtils {
/**
* 배열을 입력받아 리스트로 리턴한다.
*
* @param s 동적 배열
*/
@SafeVarargs
public static <T> List<T> listOf(T... s) {
if(s == null) {
return new ArrayList<>();
}
return Arrays.stream(s).collect(Collectors.toList());
}
/**
* 배열을 입력받아 배열리스트로 리턴한다.
*
* @param s 동적 배열
*/
@SafeVarargs
public static <T> ArrayList<T> arrayListOf(T... s) {
if(s == null) {
return new ArrayList<>();
}
return Arrays.stream(s).collect(Collectors.toCollection(ArrayList::new));
}
/**
* obj의 이름과 파라미터를 문자열로 변환하여 리턴한다.
* 객체명 [파라미터명=값, 파라미터명=값]
*
* @param obj 객체
* @return 문자열로 변환된 정보
*/
public static String getClassParams(Object obj) {
return getClassParams(obj, null);
}
/**
* obj의 이름과 파라미터를 문자열로 변환하여 리턴한다.
* 출력 제외하고자 하는 파라미터가 있을 경우 사용한다.
* 객체명 [파라미터명=값, 파라미터명=값]
*
* @param obj 객체
* @param ignores 출력 제외 파라미터명 리스트
* @return 문자열로 변환된 정보
*/
public static String getClassParams(Object obj, List<Object> ignores) {
Class<?> clazz = obj.getClass();
StringBuilder stringBuilder = new StringBuilder();
try {
// prefix 붙임
stringBuilder.append(clazz.getSimpleName()).append(" [");
Field[] fieldDatas;
if(clazz.getSuperclass() != null) {
List<Field> list1 = listOf(clazz.getSuperclass().getDeclaredFields());
List<Field> list2 = listOf(clazz.getDeclaredFields());
list1.addAll(list2);
fieldDatas = list1.toArray(new Field[0]);
} else {
fieldDatas = listOf(clazz.getDeclaredFields()).toArray(new Field[0]);
}
// print 하지 않을 파라미터는 제외하고 리스트업
Field[] fields = ignores != null
// ? Arrays.stream(clazz.getDeclaredFields())
? Arrays.stream(fieldDatas)
.filter(v -> {
try {
return !ignores.contains(v.get(obj));
} catch (IllegalAccessException e) {
return false;
}
}).toArray(Field[]::new)
: fieldDatas;
// 파라미터 내용 기록
for (Field field : fields) {
field.setAccessible(true);
Object o = field.get(obj);
stringBuilder.append(field.getName()).append("=").append(field.get(obj))
.append(", ");
}
// 마지막 ', ' 지움
stringBuilder.delete(stringBuilder.length() - 2, stringBuilder.length());
// suffix 붙임
stringBuilder.append("]");
return stringBuilder.toString();
} catch (IllegalAccessException iae) {
// 에러 발생 시, 만들어진 것까지만 갈무리하고 에러 발생 메세지 추가하여 리턴
stringBuilder.append("]");
stringBuilder.append(" ").append(iae.getMessage());
return stringBuilder.toString();
}
}
}
반응형
댓글