《Java知識應用》Java 動態生成物件例項
阿新 • • 發佈:2021-01-08
前言
工作中經常需要動態生成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}); } }
執行結果:
總結
動態生成物件還有其他方法。