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
536 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!

source:php.cn
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