写几个java反射工具方法
public class FansheUtils {static Field getDeclaredField(String clazz, String fieldName) throws ClassNotFoundException {Field field=null;Class clz = Class.forName(clazz);//super classfor (Class<?> s = clz; s != Object.class; s = s.getSuperclass()) {try {field= s.getDeclaredField(fieldName);field.setAccessible(true);} catch (NoSuchFieldException ignored) {}}return field;}public static <T> T getFieldValue(Object object, String fieldName) throws ClassNotFoundException {Field field = getDeclaredField(object.getClass().getName() , fieldName);if (field == null) {throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + object + "]");}Object result = null;try {result = field.get(object);} catch (IllegalAccessException ignored) {}return (T) result;}public static void setFieldValue(Object object, String fieldName, Object value) throws ClassNotFoundException {Field field = getDeclaredField(object.getClass().getName() , fieldName);try {//set publicif (field.isAccessible()) {field.set(object, value);} else {//set privitefield.setAccessible(true);field.set(object, value);field.setAccessible(false);}} catch (IllegalAccessException ignored) {}}protected Method getMethodByName(String methodName, Class<?> entityClazz) {Method[] methods = entityClazz.getMethods();Method method = null;for (Method i : methods) {if (methodName.equals(i.getName())) {method = i;break;}}return method;}}
public class TestFanshe {static class Test{private String name;private int age;@Overridepublic String toString() {return "TestFanshe{" +"name='" + name + '\'' +", age=" + age +'}';}}public static void main(String[] args) throws ClassNotFoundException {Test test=new Test();String name=FansheUtils.getFieldValue(test,"name");System.out.println(name);FansheUtils.setFieldValue(test,"name","tianjingle");FansheUtils.setFieldValue(test,"age",1);System.out.println(test.toString());}}

午安~
评论
