《Java知识应用》Java 动态生成对象实例
前言
工作中经常需要动态生成Java对象进行操作。
下载
百度云链接: https://pan.baidu.com/s/1vqJvIg6zBWppNrB68OdfAw 提取码: t6qk
案例
public class CompilerDemo { public static void main(String[] args) throws Exception { // 传入String类型的代码 String source = "import java.util.Arrays;public class Main" + "{" + "public static void main(String[] args) {" + "System.out.println(Arrays.toString(args));" + "}" + "}"; run(source, "1", "2"); } public static Object run(String source, String...args) throws Exception { // 声明类名 String className = "Main"; String packageName = "top.fomeiherz"; // 声明包名:package top.fomeiherz; String prefix = String.format("package %s;", packageName); // 全类名:top.fomeiherz.Main String fullName = String.format("%s.%s", packageName, className); // 编译器 JavaStringCompiler compiler = new JavaStringCompiler(); // 编译:compiler.compile("Main.java", source) Map<String, byte[]> results = compiler.compile(className + ".java", prefix + source); // 加载内存中byte到Class<?>对象 Class<?> clazz = compiler.loadClass(fullName, results); // 创建实例 Object instance = clazz.newInstance(); Method mainMethod = clazz.getMethod("main", String[].class); // String[]数组时必须使用Object[]封装 // 否则会报错:java.lang.IllegalArgumentException: wrong number of arguments return mainMethod.invoke(instance, new Object[]{args}); } }
运行结果:
总结
动态生成对象还有其他方法。
This moment will nap, you will have a dream; But this moment study,you will interpret a dream.