字串轉換為可編譯的 Java 程式碼
查詢資料庫通常會提供需要在條件結構中求值的儲存運算式。將這些字串轉換為 Java 可編譯程式碼的能力可以動態執行自訂表達式。本文探討了使用 Java 編譯器 API 的潛在解決方案,但強調了編譯任意程式碼所涉及的潛在風險。
使用 Java 編譯器 API
對於 Java 6 及更高版本, Java 編譯器 API 提供了一種以程式設計方式編譯 Java 程式碼的方法。核心元件JavaCompiler可讓您在記憶體中定義原始碼,提供動態建立Comparator物件的能力。
String comparatorClassName = ...; // Random name for comparison class String expression = ...; // Retrieved database expression String source = "public class " + comparatorClassName + " implements Comparable<" + comparableClassName + "> {" + " public int compare(" + comparableClassName + " a, " + comparableClassName + " b) {" + " return " + expression + ";" + " }" + "}";
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); Writer out = null; // Output writer Iterable<? extends JavaFileObject> compilationUnits = new ArrayList<>(); compilationUnits.add(new SimpleJavaFileObject() { /* Details for loading source String */ }); compiler.getTask(out, null, null, null, null, compilationUnits).call();
編譯後,您可以實例化Comparator並執行動態表達式:
Comparator comparator = (Comparator) Class.forName(comparableClassName).newInstance();
注意事項
以上是如何安全地將資料庫檢索的字串編譯為可執行的 Java 程式碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!