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

二话不说,直接上代码

目录结构如下(普通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,  > addMap(Map<String,  > 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\");
            // 创建对象(在使用反射创建对象的时候,可能并不知道是一个怎么样的对象,所以这里用 接收)
            // 反射调用方法时需要使用
                = mClass.newInstance();

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

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

\"\"

 

收藏 打印