Heim >Java >javaLernprogramm >Wie kann ich einen String in kompilierbaren Java-Code konvertieren und ihn für die dynamische Codegenerierung verwenden?

Wie kann ich einen String in kompilierbaren Java-Code konvertieren und ihn für die dynamische Codegenerierung verwenden?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-05 18:15:12785Durchsuche

How Can I Convert a String to Compilable Java Code and Use It For Dynamic Code Generation?

Konvertierung von String in Java-kompilierbaren Code

Können Sie einen String in Java-Code konvertieren, der kompiliert werden kann? Dies ist eine häufige Abfrage für Entwickler, die dynamisch Code basierend auf externen Eingaben generieren möchten.

Datenbankabruf und -auswertung

Sie möchten einen Vergleichsausdruck aus einer Datenbank abrufen und bewerten Sie es innerhalb einer bedingten Struktur. Um dies zu erreichen, bietet Java 6 die Java Compiler API. Diese API enthält die JavaCompiler-Klasse.

Codekonstruktion und -kompilierung

Im Speicher können Sie den Quellcode für Ihr Comparator-Objekt erstellen. Betrachten Sie den folgenden Code, der jedoch aufgrund von Plattformeinschränkungen nicht getestet wurde:

String comparableClassName = ...; // the class name of the objects you wish to compare
String comparatorClassName = ...; // something random to avoid class name conflicts
String source = "public class " + comparatorClassName + " implements Comparable<" + comparableClassName + "> {" +
                "    public int compare(" + comparableClassName + " a, " + comparableClassName + " b) {" +
                "        return " + expression + ";" +
                "    }" +
                "}";

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

// Please refer to the JavaCompiler JavaDoc page for examples of the following objects (most of which 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<? extends JavaFileObject>();
compilationUnits.add(
    new SimpleJavaFileObject() {
        // See the 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();

Sie müssen dann den entsprechenden Java-Ausdruck im entsprechenden Datenbankfeld speichern und dabei auf die Variablen „a“ und „b“ verweisen.

Achtung

Während dieser Ansatz eine dynamische Codegenerierung ermöglicht, birgt das Kompilieren von beliebigem Java-Code Sicherheitsbedenken. Es ist wichtig, Sicherheitsmaßnahmen zu implementieren, um die Ausführung von Schadcode zu verhindern.

Das obige ist der detaillierte Inhalt vonWie kann ich einen String in kompilierbaren Java-Code konvertieren und ihn für die dynamische Codegenerierung verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn