使用反射加载类以及方法的调用

1 篇文章 0 订阅

反射很大的一个优点就是灵活性高,能够动态(运行时)加载资源,这里分享一下如何使用反射加载类以及调用方法

二话不说,直接上代码,目的是使用反射创建ReflexDemo类对象以及调用它的方法。

目录结构如下(普通Java项目)

ReflexDemo.java

package priv.cwr.demo;

import java.util.Map;
import java.util.UUID;

/**
 * 反射Demo类
 */
public class ReflexDemo {
    public void print(String str) {
        System.out.println(str);
    }

    public Map<String, Object> addMap(Map<String, Object> map) {
        map.put("token", UUID.randomUUID().toString());
        return map;
    }
}

Main.java

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

public class Main {

    public static void main(String[] args) {
        try {
            // 创建Class类
            Class<?> mClass = Class.forName("priv.cwr.demo.ReflexDemo");
            // 创建对象(在使用反射创建对象的时候,可能并不知道是一个怎么样的对象,所以这里用Object接收)
            // 反射调用方法时需要使用
            Object object = mClass.newInstance();

            // 调用void print(String)方法
            Method printMethod = mClass.getMethod("print", String.class);
            printMethod.invoke(object, "Hello World");

            // Map<String, Object> addMap(Map<String, Object>)方法
            Method addMapMethod = mClass.getMethod("addMap", Map.class);
            // 需要的参数
            Map<String, Object> map = new HashMap<>(16);
            map.put("name", "Tom");
            map = (Map<String, Object>) addMapMethod.invoke(object, map);
            System.out.println("after addMap() -> " + map);
        } catch (InstantiationException
                | IllegalAccessException
                | ClassNotFoundException
                | NoSuchMethodException
                | InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}
运行结果如下:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值