java 实例属性的反射

java 实例属性的反射


一、情景

由于项目初期的架构设计缺陷,不同的功能模块划分给不同的团队成员开发,对于其中的一些对象的运行日志记录就会产生大量的打印代码。造成格式的不统一和代码量的增大。
在无法重构的情况下,设计一个通用的打印工具类就方便很多了。

二、示例

以下代码示例中,使用

import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;

public class Demo {
    // 获取当前调用者的方法名
    public static String methodName(){
        // 注意:StackTrace是压栈的方式,由调用层级决定取第几个值
        // 0是getStackTrace(), 1是methodName(), 2是printResultInfo(),3是main()
        return Thread.currentThread().getStackTrace()[3].getMethodName();
    }
    
    // 反射调用方法
    public static void callMethod(Object object, String... fields){
        for (String field : fields) {
            try {
                PropertyDescriptor pd = new PropertyDescriptor(field, object.getClass());
                Method method = pd.getReadMethod();
                Object value = method.invoke(object);
                System.out.println("field="+field+","+"value="+value);
            }catch (Exception ex){
                System.out.println(ex);
            }
        }
    }
	// 打印调用者方法名,以及响应码
    public static void printResultInfo(Object object, String... fields){
        System.out.println("Current method is call by "+ methodName());
        callMethod(object, fields);
    }

    public static void main(String[] args) {
        QueryUser queryUser = new QueryUser();
        UpdateAccount updateAccount = new UpdateAccount();

        queryUser.setCode("00");     //模拟运行成功
        updateAccount.setCode("01"); //模拟运行失败

        printResultInfo(queryUser, "code");
        printResultInfo(updateAccount, "code");
    }
}

三、总结

反射调用是java常用的手段,通过反射可以设计实现一个流程引擎或框架,也可以用作工具类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值