Executing Code Stored in a String
Question:
Can one execute Java code that is stored within a String variable? Is it possible to convert such a String into a Java statement and run it?
Answer:
Using the Compiler API
As mentioned in a previous suggestion, the Compiler API enables you to compile and execute code dynamically. Here's how you can utilize it:
<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>
Using Beanshell
Alternatively, you can employ the Beanshell library as follows:
<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>
Note that Beanshell is no longer actively developed but remains reliable for production environments.
The above is the detailed content of How to Execute Java Code Stored in a String Variable?. For more information, please follow other related articles on the PHP Chinese website!