Heim >Java >javaLernprogramm >Wie kann ich einen String in kompilierbaren Java-Code konvertieren und ihn für die dynamische Codegenerierung verwenden?
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!