Существует ли java-эквивалент функции eval python?
Это будет функция, которая принимает произвольную строку и пытается выполнить ее в текущем контексте.
Существует ли java-эквивалент функции eval python?
Это будет функция, которая принимает произвольную строку и пытается выполнить ее в текущем контексте.
На основе этот подсказку для Java компиляция строки Java на лету действительно возможна, если вы хотите использовать com.sun.tools.javac.Main.compile(source)
.
Классы в com.sun.tools
, конечно же, не являются частью официального Java API.
В Java 6 существует компилятор API для обеспечения программного доступа к компилятору. Смотрите документацию для интерфейса JavaCompiler.
Никакой прямой eval
не предоставляется любым стандартным API, но существуют инструменты для создания одного из ваших собственных. Возможно, у вас может возникнуть проблема с JVM внутри JVM, если вы попытаетесь выполнить общую общую оценку, поэтому лучше всего ограничить объем того, что вы хотите сделать.
Также смотрите: Есть ли функция eval() в Java? для некоторых хороших комментариев и объяснений.
"Да" и "нет". Да в том, что это возможно. Нет, что он не является стандартным и имеет ряд ограничений.
См. BeanShell, который позволяет выполнять ограниченную Java из процесса, который, ну, Java. Я никогда не пытался использовать его в качестве библиотеки и не могу ручаться за его использование как таковое.
BeanShell - это небольшой, бесплатный, встроенный интерпретатор источника Java с функциями языка сценариев объектов, написанными на Java. BeanShell динамически выполняет стандартный синтаксис Java и расширяет его с помощью обычных возможностей сценариев, таких как свободные типы, команды и закрытия методов, такие как Perl и JavaScript.
Тем не менее, гораздо более ограничительный/ограниченный, чем говорят eval
в Python или другом динамическом языке. (Рассмотрим JRuby, Jython, Groovy и Clojure как некоторые динамические копии, которые запускаются на JVM). Локальные имена переменных Java в окружающем коде все скомпилированы и, следовательно, недоступны, например.
Я бы рекомендовал переосмыслить подход, если это возможно; -)
Счастливое кодирование.
Если у вас есть доступ к groovy, вы всегда можете использовать Eval.me(String expression)
[api]. Это приведет к выполнению вашего Java (действительно groovy) кода в текущем контексте.
Это не так просто в Java. Java - это скомпилированный язык, и для того, чтобы "eval" использовать некоторый код, его необходимо скомпилировать. Python интерпретируется и, таким образом, "eval" намного проще.
API сценариев Java, вероятно, наиболее близок к стандартным способам выполнения строк как кода в JVM. JavaScript поддерживается в Sun JVM из коробки, но не гарантируется поддержка всех реализаций JVM.
Возможно, вы хотите выполнить команду DOS или unix в рабочем процессе выполнения Java-программы...
String command = "cmd /c dir /s";
String homeDir = "C:\\WINDOWS";
Process process = Runtime.getRuntime().exec(command + " " + homeDir);
И, возможно, вы хотите обработать выход...
final InputStream in = process.getInputStream();
int ch;
while((ch = in.read()) != -1) {
System.out.print((char)ch);
}
Закройте код с помощью try, catch