zoukankan      html  css  js  c++  java
  • Java 动态编译

    http://www.java2s.com/Tutorial/Java/0120__Development/CompileString.htm

    import java.lang.reflect.Method;
    import java.net.URI;
    import java.util.Iterator;
    import java.util.NoSuchElementException;

    import javax.tools.JavaCompiler;
    import javax.tools.JavaFileObject;
    import javax.tools.SimpleJavaFileObject;
    import javax.tools.ToolProvider;

    public class CompileString {
      public static void main(String[] argsthrows Exception {
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        String program = "class Test{" "   public static void main (String [] args){"
            "      System.out.println (\"Hello, World\");"
            "      System.out.println (args.length);" "   }" "}";

        Iterable<? extends JavaFileObject> fileObjects;
        fileObjects = getJavaSourceFromString(program);

        compiler.getTask(null, null, null, null, null, fileObjects).call();

        Class<?> clazz = Class.forName("Test");
        Method m = clazz.getMethod("main"new Class[] { String[].class });
        Object[] _args = new Object[] { new String[0] };
        m.invoke(null, _args);
      }

      static Iterable<JavaSourceFromString> getJavaSourceFromString(String code) {
        final JavaSourceFromString jsfs;
        jsfs = new JavaSourceFromString("code", code);
        return new Iterable<JavaSourceFromString>() {
          public Iterator<JavaSourceFromString> iterator() {
            return new Iterator<JavaSourceFromString>() {
              boolean isNext = true;

              public boolean hasNext() {
                return isNext;
              }

              public JavaSourceFromString next() {
                if (!isNext)
                  throw new NoSuchElementException();
                isNext = false;
                return jsfs;
              }

              public void remove() {
                throw new UnsupportedOperationException();
              }
            };
          }
        };
      }
    }

    class JavaSourceFromString extends SimpleJavaFileObject {
      final String code;

      JavaSourceFromString(String name, String code) {
        super(URI.create("string:///" + name.replace('.''/'+ Kind.SOURCE.extension), Kind.SOURCE);
        this.code = code;
      }

      public CharSequence getCharContent(boolean ignoreEncodingErrors) {
        return code;
      }
    }

    http://www.java2s.com/Tutorial/Java/0120__Development/CompileJavafile.htm

    import javax.tools.Diagnostic;
    import javax.tools.DiagnosticCollector;
    import javax.tools.JavaCompiler;
    import javax.tools.JavaFileObject;
    import javax.tools.StandardJavaFileManager;
    import javax.tools.ToolProvider;

    public class CompileFiles2 {
      public static void main(String[] args) {
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        DiagnosticCollector<JavaFileObject> dc;
        dc = new DiagnosticCollector<JavaFileObject>();

        StandardJavaFileManager sjfm;
        sjfm = compiler.getStandardFileManager(dc, null, null);

        Iterable<? extends JavaFileObject> fileObjects;
        fileObjects = sjfm.getJavaFileObjects(args);

        compiler.getTask(null, sjfm, dc, null, null, fileObjects).call();

        for (Diagnostic d : dc.getDiagnostics()) {
          System.out.println(d.getMessage(null));
          System.out.printf("Line number = %d\n", d.getLineNumber());
          System.out.printf("File = %s\n", d.getSource());
        }
      }
    }

    张旋(zxsoft)
    如对本文有什么疑问,请在下面写下留言,谢谢!

  • 相关阅读:
    EF中读取随机数据的问题
    【坐在马桶上看算法】算法3:最常用的排序——快速排序
    C#递归算法
    机器学习策略(二)---误差分析、训练集与开发测试集不相配怎么办、迁移学习/多任务学习、端到端深度学习
    机器学习策略(一)---正交化、评估指标、优化指标、训练与测试集数据集大小、可避免误差
    改善深层神经网络的优化算法:mini-batch梯度下降、指数加权平均、动量梯度下降、RMSprop、Adam优化、学习率衰减
    具有单隐藏层的二分类神经网络
    神经网络前向后向传播(理论与实战)
    梯度消失与梯度爆炸---如何选择随机初始权重
    正则化输入
  • 原文地址:https://www.cnblogs.com/zxsoft/p/1724682.html
Copyright © 2011-2022 走看看