Maison > Java > javaDidacticiel > Java peut-il compiler et exécuter du code à partir d'une chaîne ?

Java peut-il compiler et exécuter du code à partir d'une chaîne ?

Barbara Streisand
Libérer: 2024-12-02 13:40:16
original
628 Les gens l'ont consulté

Can Java Compile and Execute Code from a String?

Compilation de code dynamique à partir d'une chaîne

Question :

Une chaîne contenant du code peut-elle être converti dans un format qui peut être compilé et exécuté dans Java ?

Réponse :

Oui, en utilisant l'API du compilateur Java. Voici comment :

Dans Java 6 ou version ultérieure, utilisez la classe JavaCompiler pour compiler le code de manière dynamique.

Code :

String comparableClassName = ...;
String comparatorClassName = ...;
String source = "public class " + comparatorClassName + " implements Comparable<" + comparableClassName + "> {" +
                "    public int compare(" + comparableClassName + " a, " + comparableClassName + " b) {" +
                "        return " + expression + ";" +
                "    }" +
                "}";

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

/*
 * Refer to the JavaCompiler JavaDoc page for examples of the following objects (most can remain null)
 */
Writer out = null;
JavaFileManager fileManager = null;
DiagnosticListener<? super JavaFileObject> diagnosticListener = null;
Iterable<String> options = null;
Iterable<String> classes = null;
Iterable<? extends JavaFileObject> compilationUnits = new ArrayList<>();
compilationUnits.add(
    new SimpleJavaFileObject() {
        // See JavaDoc page for more details on loading the source String
    }
);

compiler.getTask(out, fileManager, diagnosticListener, options, classes, compilationUnits).call();

Comparator comparator = (Comparator) Class.forName(comparableClassName).newInstance();
Copier après la connexion

Remarque :

  • La compilation de code arbitraire peut assurer la sécurité implications.
  • Stockez l'expression Java dans le champ de la base de données avec les références appropriées aux variables a et b.

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal