反射就是把Java类中的各个成分映射成一个个的Java对象。即在运行状态中,对于任意一个类,都能够知道这个类的所以属性和方法;对于任意一个对象,都能调用它的任意一个方法和属性。这种动态获取信息及动态调用对象方法的功能叫Java的反射机制
反射取值一般有两种方式
一 通过属性取值赋值
/** * 属性取值 * @param t 实例 * @param field 取值字段 * @return */ public String getFieldValueByClass(T t, String field) { Class<?> aClass = t.getClass(); try { Field f = aClass.getDeclaredField(field); f.setAccessible(true); return (String) f.get(t); } catch (Exception e) { e.printStackTrace(); }return ""; } /** * 属性赋值 * @param t 实例 * @param field 赋值的字段 * @param value 赋的值 * @return */ public String setFieldValueByClass(T t,String field,String value) { Class<?> aClass = t.getClass(); Field f = null; try { f = aClass.getDeclaredField(field); f.setAccessible(true); f.set(t, value); } catch (Exception e) { e.printStackTrace(); }return ""; }
二 通过方法取值赋值
/** * 反射取值 * * @param t 实例对象 * @param methodName 方法名称 * @return */ public String getMethodValueByClass(T t, String methodName) { Class clazz = t.getClass(); try { return clazz.getMethod(methodName).invoke(t).toString(); } catch (Exception e) { e.printStackTrace(); }return ""; } /** * 方法赋值 * * @param t 实例对象 * @param methodName 方法名称 * @param value 赋的值 * @return */ public String setMethodValueByClass(T t, String methodName, String value) { Class clazz = t.getClass(); Method method = null; try { //设置参数,可设置多个参数,clazz.getMethod(field, String.class,Integer.class....) 等对应你属性里面形参即可 method = clazz.getMethod(methodName, String.class); //填充值,对应以上参数个数即可 return method.invoke(t, value).toString(); } catch (Exception e) { e.printStackTrace(); }return ""; }
~~~///(^v^)\\\~~~