zoukankan      html  css  js  c++  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});
        }
    }

    运行结果:

    总结

    动态生成对象还有其他方法。

  • 相关阅读:
    派生选择器
    HTML 标签
    $.get()
    CC150
    CC150
    CC150
    CC150
    HashMap和HashTable的区别
    CC150
    quickSort
  • 原文地址:https://www.cnblogs.com/jssj/p/14250578.html
Copyright © 2011-2022 走看看