Подтвердить что ты не робот

Существует ли java-эквивалент функции eval python?

Существует ли java-эквивалент функции eval python?

Это будет функция, которая принимает произвольную строку и пытается выполнить ее в текущем контексте.

4b9b3361

Ответ 1

На основе этот подсказку для Java компиляция строки Java на лету действительно возможна, если вы хотите использовать com.sun.tools.javac.Main.compile(source).

Классы в com.sun.tools, конечно же, не являются частью официального Java API.

В Java 6 существует компилятор API для обеспечения программного доступа к компилятору. Смотрите документацию для интерфейса JavaCompiler.

Никакой прямой eval не предоставляется любым стандартным API, но существуют инструменты для создания одного из ваших собственных. Возможно, у вас может возникнуть проблема с JVM внутри JVM, если вы попытаетесь выполнить общую общую оценку, поэтому лучше всего ограничить объем того, что вы хотите сделать.

Также смотрите: Есть ли функция eval() в Java? для некоторых хороших комментариев и объяснений.

Ответ 2

"Да" и "нет". Да в том, что это возможно. Нет, что он не является стандартным и имеет ряд ограничений.

См. BeanShell, который позволяет выполнять ограниченную Java из процесса, который, ну, Java. Я никогда не пытался использовать его в качестве библиотеки и не могу ручаться за его использование как таковое.

BeanShell - это небольшой, бесплатный, встроенный интерпретатор источника Java с функциями языка сценариев объектов, написанными на Java. BeanShell динамически выполняет стандартный синтаксис Java и расширяет его с помощью обычных возможностей сценариев, таких как свободные типы, команды и закрытия методов, такие как Perl и JavaScript.

Тем не менее, гораздо более ограничительный/ограниченный, чем говорят eval в Python или другом динамическом языке. (Рассмотрим JRuby, Jython, Groovy и Clojure как некоторые динамические копии, которые запускаются на JVM). Локальные имена переменных Java в окружающем коде все скомпилированы и, следовательно, недоступны, например.

Я бы рекомендовал переосмыслить подход, если это возможно; -)

Счастливое кодирование.

Ответ 3

Если у вас есть доступ к groovy, вы всегда можете использовать Eval.me(String expression) [api]. Это приведет к выполнению вашего Java (действительно groovy) кода в текущем контексте.

Ответ 4

Это не так просто в Java. Java - это скомпилированный язык, и для того, чтобы "eval" использовать некоторый код, его необходимо скомпилировать. Python интерпретируется и, таким образом, "eval" намного проще.

Ответ 5

API сценариев Java, вероятно, наиболее близок к стандартным способам выполнения строк как кода в JVM. JavaScript поддерживается в Sun JVM из коробки, но не гарантируется поддержка всех реализаций JVM.

Ответ 6

Возможно, вы хотите выполнить команду 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