Conversion d'une chaîne en code Java
Un développeur cherche à convertir une chaîne stockée dans une base de données en code compilable Java, dans le but de l'utiliser dans une structure conditionnelle.
Une solution proposée consiste à exploiter l'API Java Compiler, en particulier la classe JavaCompiler disponible dans Java 6. À l'aide de cette API, le développeur peut construire le code source d'un objet Comparator en mémoire.
Avertissement : L'utilisation de l'API JavaCompiler nécessite de la prudence, car la compilation de code Java arbitraire peut poser certains problèmes. risques.
Mise en œuvre :
String comparableClassName = ...; // Define the class to be compared String comparatorClassName = ...; // Assign a distinct name to prevent conflicts String source = "public class " + comparatorClassName + " implements Comparable<" + comparableClassName + "> {" + " public int compare(" + comparableClassName + " a, " + comparableClassName + " b) {" + " // Replace 'expression' with the desired comparison logic" + " return " + expression + ";" + " }" + "}"; // Obtain the necessary objects from the JavaCompiler API JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); // Configure the compilation process as per the API guidelines Writer out = null; JavaFileManager fileManager = null; DiagnosticListener<? super JavaFileObject> diagnosticListener = Iterable<String> options = null; Iterable<String> classes = null; Iterable<? extends JavaFileObject> compilationUnits = new ArrayList<? extends JavaFileObject>(); compilationUnits.add( new SimpleJavaFileObject() { // As described in the API documentation, load the 'source' string as the source code } ); // Initiate the compilation process compiler.getTask(out, fileManager, diagnosticListener, options, classes, compilationUnits).call(); // After compilation, instantiate the Comparator Comparator comparator = (Comparator) Class.forName(comparableClassName).newInstance(); // Utilize the 'comparator' for comparing objects based on the pre-defined logic
Remarque :Pour que cette solution fonctionne, l'expression Java appropriée doit être stockée dans le champ de la base de données , en utilisant 'a' et 'b' comme références.
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!