ホームページ >Java >&#&チュートリアル >文字列をコンパイル可能な Java コードに変換し、動的コード生成に使用するにはどうすればよいですか?

文字列をコンパイル可能な Java コードに変換し、動的コード生成に使用するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-05 18:15:12784ブラウズ

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

文字列から 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。