Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Menukar Rentetan kepada Kod Java Boleh Disusun dan Menggunakannya Untuk Penjanaan Kod Dinamik?

Bagaimanakah Saya Boleh Menukar Rentetan kepada Kod Java Boleh Disusun dan Menggunakannya Untuk Penjanaan Kod Dinamik?

Patricia Arquette
Lepaskan: 2024-12-05 18:15:12
asal
781 orang telah melayarinya

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

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();
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan