映射 获得 private 字段值

最近学习java映射,总结了获得private字段值的方法:

一、通过object.getClass.getMethod(methodName).invoke(object)

如:Object value = c.getMethod(getMethodName).invoke(t);

<textarea cols="50" rows="15" name="code" class="java">for(T t:ls){ Class c=t.getClass(); String getMethodName = &quot;get&quot;+toFirstLetterUpperCase(f.getObjectFiledName()); try { Object value = c.getMethod(getMethodName).invoke(t); log.debug(value); } catch (IllegalArgumentException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (SecurityException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IllegalAccessException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (InvocationTargetException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (NoSuchMethodException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }</textarea>

二、通过 filed.get(filedName);

不过如果类的字段为private,则这个方法不好使,需要先filed.setAccessible(true);

<textarea cols="50" rows="15" name="code" class="java">User u=new User(); u.setAge(&quot;20&quot;); u.setName(&quot;张三三&quot;); u.setSex(&quot;男&quot;); Class c=u.getClass(); Field[] fields=c.getDeclaredFields(); for(Field f:fields){ try { f.setAccessible(true); System.out.println(f.get(u)); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } }</textarea>

你可能感兴趣的:(映射 获得 private 字段值)