文字列に格納されたコードの実行
質問:
次の Java コードを実行できますか?文字列変数内に格納されますか?このような文字列を Java ステートメントに変換して実行することは可能ですか?
回答:
コンパイラ API を使用する
前の提案で述べたように、コンパイラー API を使用すると、コードを動的にコンパイルして実行できます。これを利用する方法は次のとおりです:
<code class="java">// Create a Java source code string String javaCode = "..."; // Create a Java compiler instance JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); // Create a source code file from the string JavaFileObject javaFile = new StringJavaFileObject("MyCode", javaCode); // Compile the source code DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>(); Iterable<? extends JavaFileObject> compilationUnits = Collections.singletonList(javaFile); compiler.getTask(null, null, diagnostics, null, null, compilationUnits).call(); // Execute the compiled code Class<?> clazz = Class.forName("MyCode"); Method method = clazz.getDeclaredMethod("myMethod"); method.invoke(null);</code>
Beanshell の使用
または、次のように Beanshell ライブラリを使用できます:
<code class="java">// Create a Beanshell interpreter and add the Java code to it Interpreter interpreter = new Interpreter(); interpreter.eval(javaCode); // Access the defined classes and methods in the interpreter Class<?> myClass = interpreter.getClassLoader().loadClass("MyClass"); Method method = myClass.getDeclaredMethod("myMethod"); method.invoke(null);</code>
Beanshell は現在は積極的に開発されていませんが、運用環境では引き続き信頼できることに注意してください。
以上が文字列変数に格納された Java コードを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。