Class fields 를 HashMap 으로 바꾸기
개인적으로 java 의 reflection 은 뭔가 code 의 가독성이 떨어지는 느낌이여서 잘 사용하지 않는다. 그런데 script 언어를 자주 사용하다보니, 쓰는것이 괜히 쓰게 된다.
여하튼 그래서 여기서는 class 의 field 값을 HashMap 으로 변환하는 방법을 알아보도록 하자.
getFields
ref.1 에 보면 field 를 가져와서 그것을 HashMap 으로 만드는 code 를 확인할 수 있다.ref.1 의 code 에 보면
- getFields()
를 사용한다. 이를 사용하면, public 으로 정의된 녀석들을 가져온다. 그리고 만약 entity 가 상속된 class(extended class) 라면 super class 의 field 도 같이 가져다 준다.
getDeclaredFields
getDeclaredFields() 를 이용하면 상속된 class 에 정의된 field 만 가져올 수 있다. 그런데 문제는 이녀석의 값을 가져올 때는 private 이라서 아래 코드처럼 f.get() 으로 가져올 수 없다. 이 때는 해당되는 getter method 를 호출해야 할 것이다. ref. 1 의 code 를 참고하자.Field[] fields = entity.getClass().getDeclaredFields(); Map<String, Object> map = new HashMap<String, Object>(); for(Field f : fields) map.put(f.getName(), f.get(entity));
댓글 없음:
댓글 쓰기