Exécuter du code stocké dans une chaîne
Question :
Peut-on exécuter du code Java qui est stocké dans une variable String ? Est-il possible de convertir une telle chaîne en une instruction Java et de l'exécuter ?
Réponse :
Utilisation de l'API du compilateur
Comme mentionné dans une suggestion précédente, l'API Compiler vous permet de compiler et d'exécuter du code de manière dynamique. Voici comment vous pouvez l'utiliser :
<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>
Utiliser Beanshell
Vous pouvez également utiliser la bibliothèque Beanshell comme suit :
<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>
Notez que Beanshell n'est plus activement développé mais reste fiable pour les environnements de production.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!