java 利用反射 动态获取一个类的方法和属性,并执行所需方法

利用java反射来动态的进行类中方法的基本操作

作为开发项目中,在一定的应用场景下使用类的反射会使代码更简洁,增加复用性,以下写的一个测试可以参考下
此类反射的demo希望对您有用

废话不多说,上代码

创建的Apple类作为开发场景中的pojo对象使用

public class Apple {

    public String age;
 
    @Column(name = "name")
    private String name;

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

   public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

测试类中的main方法

    public static void main(String[] args) {

        Apple apple = new Apple();
        //类反射动态方法
        String name = getClassByStr(apple);
        
        System.out.println(name);
        System.out.println(apple.getName());
    }

类反射执行方法

 public static String getClassByStr(Object object){
        String str = "";
        try {
            //获取所有属性(包括私有属性)
            Field[] fields = object.getClass().getDeclaredFields();
            //获取所有方法
            Method[] methods = object.getClass().getMethods();
            for(Field e : fields){
                e.setAccessible(true);
                //获取当前属性中的Column注解
                Column column = e.getAnnotation(Column.class);
                //注解不为空并且name不为空
                if(column !=null && StringUtils.isNotBlank(column.name())){
                    //获取所需属性值
                    String requestValue = "奥尼尔";
                    //判断不为空
                    if(StringUtils.isNotBlank(requestValue)){
                        //获取方法名称
                        String methodName = getMethodNameCase(e.getName());
                        //获取set方法
                        Method method = object.getClass().getMethod("set"+methodName,e.getType());
                        //获取get方法
                        Method getmethod = object.getClass().getMethod("get"+methodName);
                        if(method != null && getmethod != null){
                            //调用当前方法将requestValue放入
                            method.invoke(object,requestValue);
                            //当用get方法获取放入的值给str中返回
                            str = (String) getmethod.invoke(object);
                        }

                    }
                }
            }
        }catch (Exception e ){
            e.printStackTrace();
        }
        return str;
    }

通过属性名称来获取方法名称

  //通过类的属性名来获取方法名
    public static String getMethodNameCase(String methodName){
        try {
            if(StringUtils.isEmpty(methodName))     return methodName;
            String head = methodName.substring(0,1);
            methodName = head.toUpperCase()+methodName.substring(1);
            return methodName;
        }catch (Exception e ){
            e.printStackTrace();
            return "";
        }
    }

以上就是全部,最后的输出结果是
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值