反射就是把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^)\\\~~~