1. 程式人生 > 實用技巧 >《Java知識應用》Java 動態生成物件例項

《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}); } }

執行結果:

總結

動態生成物件還有其他方法。