Java编程中访问对象父类成员方法


通过反射可以直接获取对象的变量值(private\public\protected\包\静态)、调用对象的内部方法(private\public\protected\包\静态)、有参无参构造方法,但当使用这套方法调用对象的父类成员或方法时,却不能用了,你可能会遇到变量不存在,没权限访问问题。那么访问父类成员的方法又是什么呢?答案如下:

    /**
     * 获取对象的父类成员值
     * 例子:
     * Object value=getValue(Base.class, grand, "name");
     *
     * @param classType object对象的父类
     * @param object    对象
     * @param fieldName 成员名
     * @return
     * @throws NoSuchFieldException
     * @throws IllegalAccessException
     */
    public static Object getValue(Class<?> classType, Object object, String fieldName) throws NoSuchFieldException, IllegalAccessException {
        Field field = classType.getDeclaredField(fieldName);
        if (!field.isAccessible()) {
            field.setAccessible(true);
        }
        return field.get(object);
    }

    /**
     * 设置对象的父类成员值
     * 例子:
     * invokeValue(Base.class, grand, "name", "new value");
     *
     * @param classType object对象的父类
     * @param object    对象
     * @param fieldName 成员名
     * @param value     值
     * @throws IllegalAccessException
     * @throws NoSuchFieldException
     */
    public static void invokeValue(Class<?> classType, Object object, String fieldName, Object value) throws IllegalAccessException, NoSuchFieldException {
        Field field = classType.getDeclaredField(fieldName);
        if (!field.isAccessible()) {
            field.setAccessible(true);
        }
        field.set(object, value);
    }

    /**
     * 调用对象父类的内部方法(private,proteced,public)
     * 例子:
     * invokeMethod(PackageClass.class, grand, "getValue", new Class[]{String.class}, "extension"); 
     * @param classType      对象父类
     * @param object         对象
     * @param methodName     方法名
     * @param parameterTypes 方法参数类型数组
     * @param args           参数值
     * @return
     * @throws NoSuchMethodException
     * @throws InvocationTargetException
     * @throws IllegalAccessException
     */
    public static Object invokeMethod(Class<?> classType, Object object, String methodName, Class<?>[] parameterTypes, Object... args) throws
            NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        Method method = classType.getDeclaredMethod(methodName, parameterTypes);
        if (!method.isAccessible()) {
            method.setAccessible(true);
        }
        return method.invoke(object, args);
    }


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值