Penukaran Kod Boleh Kompilasi Rentetan ke Java
Bolehkah anda menukar String kepada kod Java yang dikompil? Ini ialah pertanyaan biasa untuk pembangun yang ingin menjana kod secara dinamik berdasarkan input luaran.
Pendapatan dan Penilaian Pangkalan Data
Anda ingin mendapatkan semula ungkapan perbandingan daripada pangkalan data dan menilainya dalam struktur bersyarat. Untuk mencapai ini, Java 6 menawarkan API Pengkompil Java. API ini termasuk kelas JavaCompiler.
Pembinaan dan Penyusunan Kod
Dalam ingatan, anda boleh membina kod sumber untuk objek Comparator anda. Pertimbangkan kod berikut, walaupun ia belum diuji kerana had platform:
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();
Anda mesti menyimpan ungkapan Java yang sesuai dalam medan pangkalan data yang berkaitan, merujuk pembolehubah "a" dan "b."
Awas
Walaupun pendekatan ini membenarkan penjanaan kod dinamik, menyusun sewenang-wenangnya Kod Java membentangkan kebimbangan keselamatan. Adalah penting untuk melaksanakan perlindungan untuk mengelakkan pelaksanaan kod berniat jahat.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Rentetan kepada Kod Java Boleh Disusun dan Menggunakannya Untuk Penjanaan Kod Dinamik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!