>Java >java지도 시간 >Java가 문자열에서 코드를 컴파일하고 실행할 수 있습니까?

Java가 문자열에서 코드를 컴파일하고 실행할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-02 13:40:16532검색

Can Java Compile and Execute Code from a String?

문자열에서 동적 코드 컴파일

질문:

코드가 포함된 문자열을 컴파일하고 실행할 수 있는 형식으로 변환됩니다. Java?

답변:

예, Java Compiler API를 사용합니다. 방법은 다음과 같습니다.

Java 6 이상에서는 JavaCompiler 클래스를 활용하여 코드를 동적으로 컴파일합니다.

코드:

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();

참고:

  • 임의 코드 컴파일 보안에 영향을 미칠 수 있습니다.
  • 변수 a 및 b에 대한 적절한 참조를 사용하여 데이터베이스 필드에 Java 표현식을 저장합니다.

위 내용은 Java가 문자열에서 코드를 컴파일하고 실행할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.