ホームページ >Java >&#&チュートリアル >文字列をコンパイル可能な Java コードに変換し、動的コード生成に使用するにはどうすればよいですか?
文字列から Java コンパイル可能なコードへの変換
文字列をコンパイル可能な Java コードに変換できますか?これは、外部入力に基づいてコードを動的に生成したい開発者にとって一般的なクエリです。
データベースの取得と評価
データベースから比較式を取得したい場合そしてそれを条件付き構造内で評価します。これを実現するために、Java 6 は Java コンパイラ API を提供します。この API には JavaCompiler クラスが含まれています。
コードの構築とコンパイル
メモリ内で、Comparator オブジェクトのソース コードを構築できます。次のコードを考えてみましょう。ただし、プラットフォームの制限によりテストされていません。
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();
その後、変数 "a" と "b" を参照して、適切な Java 式を関連するデータベース フィールドに格納する必要があります。
注意
このアプローチでは動的コード生成が可能ですが、任意のコードをコンパイルすることはできません。 Java コードにはセキュリティ上の懸念があります。悪意のあるコードの実行を防ぐための安全策を実装することが重要です。
以上が文字列をコンパイル可能な Java コードに変換し、動的コード生成に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。