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
548 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!

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