[Java] Object 타입에 상관없이 VO 데이터 가져오기
1. 전혀 다른 두 개의 VO
- 참고로 @Data는 Lombok 라이브러리를 사용하기 때문에 쓴 것이니, Lombok이 따로 설치되지 않은 경우에는 getter, setter, toString 메서드를 오버라이딩하길 바란다.
@Data public class Grade { private String subject; private String name; private int grade; }@Data public class Favorite { private String color; private String animal; private int number; }- 예시) 두 VO의 데이터는 다음과 같다
Grade grade = new Grade(); grade.setSubject("수학"); grade.setName("haenny"); grade.setGrade(95); Favorite fav = new Favorite(); fav.setColor("blue"); fav.setAnimal("lion"); fav.setNumber(3);2. getVOvalue 메서드의 유동적인 파라메터 ?
- 파라메터 타입 Grade 인 경우
public void getVOvalue(Grade vo) { System.out.println("subject : " + vo.getSubject()); System.out.println("name : " + vo.getName()); System.out.println("grade : " + vo.getGrade()); } // output // subject : 수학 // name : haenny // grade : 95- 파라메터 타입 Favorite 인 경우
public void getVOvalue(Favorite vo) { System.out.println("color : " + vo.getColor()); System.out.println("animal : " + vo.getAnimal()); System.out.println("number : " + vo.getNumber()); } // output // color : blue // animal : lion // number : 3getVOvalue는 파라메터로 넘어온 VO 객체의 컬럼명과 값을 출력하는 메서드이다.
같은 기능을 하는 메서드인데, 어떤 파라메터가 넘어오냐에 따라 위 처럼 코드를 구현해야하는가?
으음~
해결. Object 타입에 상관없이 VO 데이터를 가져오자
- 어떤 Object를 넘겨도 해당 컬럼명과 컬럼값을 출력해준다.
public void getVOvalue(Object vo) { for(Field field : vo.getClass().getDeclaredFields()){ field.setAccessible(true); Object value = field.get(vo); System.out.println(field.getName()+" : "+value); } }[java] VO객체의 전체 변수와 값 가져오기
2017. 9. 14. 13:59
VO객체의 전체 변수와 값 가져오기
개발을
하다보면 VO객체에 선언된 변수를 모두 가져오고 싶을 경우가 있는데, 이때 자바에서
기본적으로 제공하는 java.lang.reflect.Field 클래스를 사용하면 쉽게 가져올 수 있습니다.
public class reflectFieldTest{ public static void main(String[] args){ // 가져오고자하는 객체를 선언합니다. ( 새로 생성할 경우 value는 존재하지 않습니다. ) Student student = new Student(); try { Object obj = student; // 반복문을 이용하여 해당 클래스에 정의된 필드를 가져옵니다. for (Field field : obj.getClass().getDeclaredFields()) { field.setAccessible(true); Object value = field.get(obj); // 필드에 해당하는 값을 가져옵니다. System.out.println("field : "+field.getName()+" | value : " value); } }catch (Exception e) { e.printStackTrace(); } } }
전재하다
linshutao 블로그 클릭 링크 열기
항목이 필요하므로 일반적으로 사용되는 몇 가지 작업을 간단하게 패키지화합니다.
[java] view plain
copy
print ?
/**
.
* */
try {
String getter = "get" + firstLetter + fieldName.substring(1);
Object value = method.invoke(o, new Object[] {});
} catch (Exception e) {
return null;
}
/**
* */
Field[] fields=o.getClass().getDeclaredFields();
for(int i=0;i
fieldNames[i]=fields[i].getName();
return fieldNames;
* 속성 유형(type), 속성 이름(name), 속성 값(value)의 맵으로 구성된list 가져오기
private List getFiledsInfo(Object o){
String[] fieldNames=new String[fields.length];
Map infoMap=null;
infoMap = new HashMap();
infoMap.put("name", fields[i].getName());
list.add(infoMap);
return list;
* 객체의 모든 속성 값을 가져오고 객체 배열을 반환합니다.
public Object[] getFiledValues(Object o){
Object[] value=new Object[fieldNames.length];
value[i]=this.getFieldValueByName(fieldNames[i], o);
return value;