Rumah > Java > javaTutorial > Bolehkah Java Menyusun dan Melaksanakan Kod daripada String?

Bolehkah Java Menyusun dan Melaksanakan Kod daripada String?

Barbara Streisand
Lepaskan: 2024-12-02 13:40:16
asal
627 orang telah melayarinya

Can Java Compile and Execute Code from a String?

Menyusun Kod Dinamik daripada Rentetan

Soalan:

Bolehkah String yang mengandungi kod ditukar kepada format yang boleh disusun dan dilaksanakan Java?

Jawapan:

Ya, menggunakan Java Compiler API. Begini caranya:

Dalam Java 6 atau lebih baru, gunakan kelas JavaCompiler untuk menyusun kod secara dinamik.

Kod:

String comparableClassName = ...;
String comparatorClassName = ...;
String source = "public class " + comparatorClassName + " implements Comparable<" + comparableClassName + "> {" +
                "    public int compare(" + comparableClassName + " a, " + comparableClassName + " b) {" +
                "        return " + expression + ";" +
                "    }" +
                "}";

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

/*
 * Refer to the JavaCompiler JavaDoc page for examples of the following objects (most 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<>();
compilationUnits.add(
    new SimpleJavaFileObject() {
        // See 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

Nota:

  • Menyusun kod arbitrari boleh mempunyai implikasi keselamatan.
  • Simpan ungkapan Java dalam medan pangkalan data dengan rujukan yang sesuai kepada pembolehubah a dan b.

Atas ialah kandungan terperinci Bolehkah Java Menyusun dan Melaksanakan Kod daripada String?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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