필요한 것은 실행 시간에 문자열로 정의 된 표현식을 평가할 수있는 엔진/라이브러리입니다. 평가 코드를 함수 호출 (예 : 람다 함수)에 랩핑하면 필요한 것을 얻을 수 있습니다.
옵션 1 :exp4j을 사용할 수 있습니다. exp4j은 실행 시간에 표현식과 함수를 평가할 수있는 작은 풋 프린트 라이브러리입니다.
Expression e = new ExpressionBuilder("3 * sin(y) - 2/(x - 2)")
.variables("x", "y")
.build()
.setVariable("x", 2.3)
.setVariable("y", 3.14);
double result = e.evaluate();
옵션 2 : 다음은 그 예이다 당신은 Java's script engine를 사용할 수 있습니다. 당신은 자바 스크립트, 예를 들어, 정의 식을 평가하는 데 사용할 수 있습니다 :
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
Object result = engine.eval("sin(1.25)");
옵션 3 : 기본 자바 컴파일. 이 방법을 사용하면 템플릿을 사용하여 표현식이 포함 된 클래스로 .java 파일을 생성 할 수 있습니다. Java 컴파일러를 호출하는 것보다. 이 접근 방식에는 구현에 약간의 복잡성과 초기 대기 시간 (클래스가 컴파일 될 때까지)이 있지만 성능이 가장 좋은 단점이 있습니다. 여기에 몇 가지 링크가 탐험 있습니다
주에서, 당신은 보안에 대해 생각해야 마음에 있습니다. 사용자가 보안 제한없이 평가할 수있는 코드를 입력하도록 허용하는 것은 매우 위험 할 수 있습니다.
컴파일 타임 (일부 빌드 도구 플러그인 포함) 또는 런타임에 바이트 코드 생성을 통해 옵션 3을 확장 할 수 있습니다. –
도움을 주셔서 대단히 감사드립니다. 당신은 세 번째 옵션을 사용할 수있는 방법에 대한 링크를 게시 할 수 있습니까? 꽤 흥미로운 것 같습니다. – odermark
@odermark는 응답에 대한 링크를 추가했습니다. 나는 처음이 너에게 좋은 출발을 주어야한다고 생각한다. –