java 反射取值


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM