JAVA REFLECTION
What if You need to transfer Object to Map which means You are going to relocate your Object's private members to a Map. ALL. previously, We've seen how to do this. I would assume that you've already had my code in first '[Java Reflection REVIEW]자바리블렉션 사용기 -01'
Info info = new Info("name", "password", "alias", "address", "strength",
"etc1", "etc2");
ObjectToMap(map, Arrays.asList("name", "password", "alias",
"address", "strength", "etc1", "etc2"), info);
But I want to code like this! Because always all of members in Info move into a Map.
ObjectToMap(map, info);
How is it possible. We'll use Reflection and collect perticular methods (which are getters) in invoke them. Firstly, make a method called "ObjectToMap"
private void ObjectToMap(Map map, Object sms) {
List methods = getGetters(getMethods(sms), sms);
for ( Method method : methods) {
map.put(CamelToSnake(dropGet(method.getName())), invokeMethod(method,sms));
}
}
You can see there is a for loop statement. We will get getMethods in Object via getGetters(); Second, create getGetters
private List getGetters(final Method[] methods, Object obj) {
int len = methods.length;
List res = new ArrayList();
for(int i = 0; i < len ; i++) {
if(methods[i] != null && methods[i].getName().startsWith("get") &&
!methods[i].getName().endsWith("Class") ) {
res.add(methods[i]);
}
}
return res;
}
private Method[] getMethods(Object sms) {
return sms.getClass().getMethods();
}
finally, INVOKE!!!!
private String invokeMethod( Method method, Object sms) {
String res = null;
try {
res = String.class.cast(method.invoke(sms));
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
You can test easily. I hope you enjoy my text. Your comments will help my blog. Thank you.
댓글 없음:
댓글 쓰기