Java object 값 가져오기 - java object gabs gajyeoogi

[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 : 3

getVOvalue는 파라메터로 넘어온 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 ?
/**

  • * 속성 이름을 기준으로 속성 값을 가져옵니다
  • .
     * */

  •    private Object getFieldValueByName(String fieldName, Object o) {  
  •        

    try {

  •            String firstLetter = fieldName.substring(0, 1).toUpperCase();    
  •            

    String getter = "get" + firstLetter + fieldName.substring(1);

  •            Method method = o.getClass().getMethod(getter, new Class[] {});    
  •            

    Object value = method.invoke(o, new Object[] {});

  •            return value;    
  •        

    } catch (Exception e) {

  •            log.error(e.getMessage(),e);    
  •            

    return null;

  •        }    
  •    

    }

  •      
  •    

    /**

  • * 속성 명수 그룹 가져오기
  •     

    * */

  •    private String[] getFiledName(Object o){  
  •     

    Field[] fields=o.getClass().getDeclaredFields();

  •         String[] fieldNames=new String[fields.length];  
  •     

    for(int i=0;i

  •         System.out.println(fields[i].getType());  
  •         

    fieldNames[i]=fields[i].getName();

  •     }  
  •     

    return fieldNames;

  •    }  

  •      
  •    /** 
  • * 속성 유형(type), 속성 이름(name), 속성 값(value)의 맵으로 구성된list 가져오기

  •     * */  
  •    

    private List getFiledsInfo(Object o){

  •     Field[] fields=o.getClass().getDeclaredFields();  
  •         

    String[] fieldNames=new String[fields.length];

  •         List list = new ArrayList();  
  •         

    Map infoMap=null;

  •     for(int i=0;i
  •         

    infoMap = new HashMap();

  •         infoMap.put("type", fields[i].getType().toString());  
  •         

    infoMap.put("name", fields[i].getName());

  •         infoMap.put("value", getFieldValueByName(fields[i].getName(), o));  
  •         

    list.add(infoMap);

  •     }  
  •     

    return list;

  •    }  

  •      
  •    /** 
  • * 객체의 모든 속성 값을 가져오고 객체 배열을 반환합니다.

  •     * */  
  •    

    public Object[] getFiledValues(Object o){

  •     String[] fieldNames=this.getFiledName(o);  
  •     

    Object[] value=new Object[fieldNames.length];

  •     for(int i=0;i
  •         

    value[i]=this.getFieldValueByName(fieldNames[i], o);

  •     }  
  •     

    return value;

  •    }      
  • /** * * */ private Object getFieldValueByName(String fieldName, Object o) { try { String firstLetter = fieldName.substring(0, 1).toUpperCase(); String getter = "get" + firstLetter + fieldName.substring(1); Method method = o.getClass().getMethod(getter, new Class[] {}); Object value = method.invoke(o, new Object[] {}); return value; } catch (Exception e) { log.error(e.getMessage(),e); return null; } } /** * * */ private String[] getFiledName(Object o){ Field[] fields=o.getClass().getDeclaredFields(); String[] fieldNames=new String[fields.length]; for(int i=0;i

    Toplist

    최신 우편물

    태그