Класс groovy.util.Eval
, вероятно, является самым простым способом динамического выполнения Groovy во время выполнения. Ниже приведен пример:
import groovy.util.Eval;
public class Goovy123 {
public static void main(String[] args) {
System.out.println(Eval.me("33*3"));//99
System.out.println(Eval.me("'foo'.toUpperCase()"));//FOO
}
}
Я использовал следующую зависимость maven в своем проекте для необходимой библиотеки:
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.5.8</version>
<type>pom</type>
</dependency>
Обновление:
Я публикую это обновление, чтобы добавить пример состояния, которого не было в моем исходном ответе. Используя класс groovy.lang.Binding
, вы можете сохранить состояние в переменной и использовать его позже в своей программе. Ниже приведен пример:
import groovy.lang.Binding;
import groovy.lang.GroovyShell;
import groovy.util.Eval;
public class Goovy123 {
public static void main(String[] args) throws InterruptedException {
Binding binding = new Binding();
String foo="foo";
binding.setVariable("foo", foo);
GroovyShell shell = new GroovyShell(binding);
System.out.println("Original state: "+binding.getVariable("foo"));
shell.evaluate("foo=foo.toUpperCase();");
System.out.println("Changed state: "+binding.getVariable("foo"));
}
}