Maison >Java >javaDidacticiel >Comment exécuter du code Java stocké dans une variable chaîne ?

Comment exécuter du code Java stocké dans une variable chaîne ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-24 19:27:29544parcourir

How to Execute Java Code Stored in a String Variable?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn