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^)\\\~~~

posted @ 2022-01-15 19:49  lanwf  阅读(2878)  评论(0编辑  收藏  举报