Есть ли что-то вроде интерактивного режима REPL в Python, но для Java?

Есть ли что-то вроде интерактивного режима REPL в Python, но для Java? Чтобы я мог, например, набрать InetAddress.getAllByName( localHostName ) в окне и сразу же получить результаты, без всей этой публичной статической пустоты nightmare ()?

Да, есть: scravy.de/blog/2012-02-27/a-read-eval-print-loop-for-java.ht‌ m

scravy 09.10.2012 00:52

Java представляет это в JDK-9: JEP 222: jshell: оболочка Java

Not a bug 17.06.2015 12:49
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
92
2
22 347
29
Перейти к ответу Данный вопрос помечен как решенный

Ответы 29

В большинстве IDE есть окно, называемое чем-то вроде «немедленный режим», которое позволяет вам оценивать Java-код на лету.

У Eclipse есть "дисплейный" вид, который близок к тому, что я хочу. Проблема в том, что это должно быть в контексте запущенного приложения. Мне нужно запустить приложение, остановиться на точке останова, и только тогда я могу ввести то, что хочу.

Yoni Roit 29.12.2008 14:03

@YoniRoit IMHO Мне больше нравится "отображение" + режим отладки, чем REPL в командной строке. Я использовал REPL с Python давным-давно, так что сделал и то, и другое. Я думаю, что гораздо лучше написать модульный тест и разместить точку останова и поиграть с желаемым контекстом, вставляя любой работающий код обратно в модульный тест. Получить точный контекст в простом REPL намного сложнее, чем, скажем, в модульном тесте.

Adam Gent 31.03.2013 17:56

Jython - это реализация на Python, которая позволяет вам проверять объекты Java и взаимодействовать с ними.

>>> from java.net import *
>>> InetAddress.getAllByName("google.com")
array(java.net.InetAddress,[google.com/209.85.171.100, 
                            google.com/74.125.45.100,
                            google.com/74.125.67.100])
Ответ принят как подходящий

редактировать Начиная с Java 9 есть JShell

Исходный ответ следует

Вы также можете использовать Groovy Console. Это интерактивная консоль, где вы можете делать то, что хотите. Поскольку Groovy также включает классы из базовой платформы Java, вы также сможете использовать эти классы.

Выглядит это так:

Screenshot of Groovy

Скриншот больше не существует на imageshack.

user1655874 04.03.2013 22:31

Что особенно приятно в Groovy-консоли, так это то, что по умолчанию импортируется гораздо больше пакетов (например, java.util. *), Поэтому вам не нужно писать так много операторов импорта

Dónal 15.07.2013 21:27

Для тех, кому лень устанавливать Groovy, доступна онлайн-версия этой консоли: groovyconsole.appspot.com. Некоторые библиотеки JDK недоступны (например, ввод-вывод и System.exit()), но для большинства целей этого должно быть достаточно.

Dónal 15.07.2013 21:32

Это не принимает классы, это нормально? class test{public static void test(){System.out.println('test')}}

Lime 11.02.2017 06:22

отличная консоль позволяет вам это делать. На самом деле он был предназначен для того, чтобы попробовать и протестировать отличный код, но, поскольку groovy - это надмножество Java, он также позволяет использовать простые Java-материалы.

Я просто ввел это в консоль:

InetAddress.getAllByName('localhost')

и нажмите CTRL-R, затем он вернется:

groovy> InetAddress.getAllByName('localhost')

Result: [localhost/127.0.0.1]

Clojure предоставляет REPL, который вы можете использовать.

В качестве альтернативы Groovy попробуйте Beanshell: http://www.beanshell.org/

Он больше похож на Java и позволяет напрямую использовать Java-синтаксис.

Поддерживается ли бобовая оболочка?

rogerdpack 09.09.2010 05:33

BeanShell активно поддерживается как beanshell 2 - code.google.com/p/beanshell2

hshib 30.10.2013 17:26

@hshib: Нет. Последний коммит на github датируется 2013 годом.

Martin Schröder 22.05.2017 15:36

Scala также предлагает интерактивную консоль. Я смог использовать его, чтобы получить результат для выражения в вашем вопросе, полностью определив InetAddress, как в:

java.net.InetAddress.getAllByName("localhost")

Для людей, имеющих доступ к Mathematica, JLink позволяет получить доступ к Java и скриптам с кодом Mathematica:

Needs["JLink`"]
LoadJavaClass["java.net.InetAddress"]
InetAddress`getAllByName["localhost"]

Нажмите Shift-Enter, чтобы оценить, и вы получите

{<<JavaObject[java.net.Inet4Address>>}

Затем вы можете использовать функцию Map в системе Mathematica для вызова toString для возвращаемых объектов:

#@toString[]& /@ %

чтобы получить результат (или использовать менее запутанный синтаксис Map[Function[obj, obj@toString[]], %]):

{"localhost/127.0.0.1"}

Если вы начнете серьезно относиться к этому, вы захотите прочитать учебник Тодда Гейли на http://reference.wolfram.com/mathematica/JLink/tutorial/Overview.html.

В Eclipse есть функция для этого, хотя это не цикл. Это называется «Страница альбома для вырезок». Я предполагаю, что аналогия должна заключаться в том, что у вас есть альбом для вырезок, в котором вы собираете небольшие фрагменты кода.

В любом случае, чтобы он заработал, откройте проект в Eclipse (ваша страница Scrapbook будет связана с проектом - Eclipse нравится, когда проекты принадлежат вещам).

Потом:

  1. В окне навигатора проекта выберите папку, которая существует где-то в вашем проекте.
  2. Либо выберите меню File -> New -> Other, либо нажмите Control-N.
  3. Выберите Java -> Java Run / Debug -> Scrapbook Page.
  4. Нажмите «Далее», затем дайте ему имя файла, затем нажмите «Готово».

Теперь у вас есть страница альбома для вырезок. Введите код, например, такой:

System.out.println(System.getProperties());

Затем выделите текст с помощью мыши и либо нажмите Control-U, либо выберите «Выполнить» в контекстном меню. Код будет запущен, и результат появится на консоли.

Вы также можете ввести выражение, выбрать его и выбрать «Показать» в контекстном меню. Он оценит выражение и напечатает его тип. Например, при запуске Display на 1 + 2 будет напечатан (int) 3.

Спасибо за это. Для меня Beanshell задерживался на всплеске, но это отлично работает.

Bayard Randel 14.09.2010 01:20

Я так давно использую Eclipse, но не знал об этом, спасибо!

Tobold 27.06.2012 18:30

Вы можете взглянуть на BlueJ, интерактивную среду разработки Java, предназначенную для обучения ООП, а не как полноценную IDE, такую ​​как Eclipse или NetBeans. В любом случае это довольно забавно.

Вы можете увидеть это в действии на YouTube в серии руководств по Java.

это интересно. Bluej похож на оперативного ответа. Не очень полезно для вещей, для которых вы в настоящее время используете repl, но вы можете использовать его для прототипирования вашего oo-дизайна, как вы использовали бы repl для прототипа метода.

Bill K 28.11.2014 12:12

BeanShell is a small, free, embeddable Java source interpreter with object scripting language features, written in Java. BeanShell dynamically executes standard Java syntax and extends it with common scripting conveniences such as loose types, commands, and method closures like those in Perl and JavaScript. You can use BeanShell interactively for Java experimentation and debugging as well as to extend your applications in new ways. Scripting Java lends itself to a wide variety of applications including rapid prototyping, user scripting extension, rules engines, configuration, testing, dynamic deployment, embedded systems, and even Java education.

http://www.beanshell.org/

http://www.beanshell.org/manual/syntax.html#Standard_Java_Syntax

Существуют также интерактивные оболочки Jython и JRuby для менее подробного синтаксиса.

bakkal 14.04.2010 13:02

BeanShell активно поддерживается как beanshell 2 - code.google.com/p/beanshell2

hshib 30.10.2013 17:24

Простой пример запуска beanshell из командной строки можно найти здесь

Brad Parks 13.01.2016 17:53

@hshib: Сейчас это Github, а последняя фиксация сделана в 2013 году. Это нет «активно поддерживается».

Martin Schröder 22.05.2017 15:34

@ MartinSchröder, этот комментарий БЫЛ В 2013 году :-)

hshib 23.05.2017 16:39

Я провел некоторое исследование состояния BeanShell пару лет назад в ответ на stackoverflow.com/questions/26549307/current-state-of-beansh эл. пару лет назад.

hshib 23.05.2017 16:43

Если вы уже знаете Groovy (что, я полагаю, вы знаете, поскольку вы упомянули Groovy Console), просто используйте groovysh или groovyConsole, которые включены в дистрибутив Groovy. Если у вас есть пользовательские jar-файлы, которые вы хотите импортировать, вы можете написать командный файл, который запускает groovysh / groovyConsole с теми, которые добавлены в путь к классам. Вы также можете сделать это

this.class.classLoader.rootLoader.addURL(new URL("file:///path to file"))

изнутри оболочки, чтобы загрузить другие банки.

Несколько лет назад я использовал Jython, чтобы делать то, о чем вы просите. В рамках моего сценария сборки я создал пользовательские файлы jython.bat и .py, которые включали полный путь к классам для проекта, над которым я работал. Таким образом, когда я запустил Jython, у него был бы весь доступный код, и он запустил бы Spring, чтобы я мог вертеться в реальной системе. То же самое можно сделать с Groovy, JRuby, BeanShell и т. д.

Я знаю, что могу использовать Groovy-оболочку, но Groovy не имеет точно такой же семантики, как Java, и не имеет проверки типов. Так что вполне возможно, что я мог получить ошибки компиляции или другое поведение во время выполнения с фрагментом кода Java, который, казалось, работал в оболочке Groovy.

Dónal 14.04.2010 18:30

Groovy также загрузит все библиотеки в ~ / .groovy / lib, вы можете либо скопировать туда файлы, либо использовать символические ссылки

Jason 14.08.2015 19:59

Jython, JIRB для JRuby, Groovy (groovyconsole и др.) И Beanshell - все это жизнеспособные варианты.

Я использовал InteractiveConsole для Jython, он действительно отлично работал в приложении.

вы можете создать скрипт java, используя jruby http://kenai.com/projects/jruby/pages/CallingJavaFromJRuby

DrJava - это образовательная среда IDE, которая включает панель REPL.

Также есть плагин Eclipse, но он у меня не сработал. Я думаю, что он просто не обновлялся какое-то время. Итак, что я обычно делаю, так это оставляю окно DrJava открытым для вопросов «что произойдет, если я сделаю это».

EclipseShell тоже может подойти, но я еще не использовал его.

Вы можете использовать страницы Eclipse Scrapbook.

В Eclipse создайте страницу альбома для вырезок. В вашем проекте, New-> Other-> Scrapbook page.

В файле введите текст, выделите его и нажмите ctrl-U, и все готово.

Чтобы управлять импортом, щелкните страницу правой кнопкой мыши и выберите «Установить импорт», где вы можете выбрать импорт пакета или отдельного класса. Это постоянно и сохраняется вместе со страницей.

Как бы полезно это ни было, страница альбома для вырезок не является постоянным сеансом, поэтому на самом деле она не очень хорошо работает в качестве REPL.

MHarris 17.01.2012 17:35

Beanshell 2

Не поддерживается.

Martin Schröder 22.05.2017 15:38

Кажется, никто еще не упомянул, что Java (6, 7) поставляет консоль REPL под названием jrunscript. Он не зависит от языка (поэтому может использоваться с Jython, JRuby и т. д.). По умолчанию используется JavaScript (Rhino), который также включен по умолчанию, и, как и в других языках, вы можете получить доступ ко всем пакетам / объектам, доступным в пути к классам.

Хотя присутствуют JRuby, BeanShell, REPL Джулиана Флейшера, REPL Альберта Латача кажется последним и активным.

Пробовал с простым определением класса, отлично работает.

$ java -jar javarepl.jar
Welcome to JavaREPL version 56 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_17)
Type in expression to evaluate.
Type :help for more options.

java> public class Test {
    | public static void execute(String [] s) {
    |  System.out.println(54353 + s[0]);
    | }}

java> Test.execute(new String [] {"234343"});
54353234343

java> System.exit(0);

Старый вопрос, но теперь есть лучший ответ (май 2013 г.) - java-REPL! Он доступен на github, а также доступен в прямом эфире на сайт java-repl для быстрого одноразового тестирования.

Если вы возьмете код концентратора git и запустите ant для генерации артефактов, вы можете упростить его использование с помощью небольшого скрипта, например:

#!/bin/sh
java -jar /home/rdahlgren/scripts/javarepl-dev.build.jar

С тех пор, как нашел этот проект, я, наверное, использую его 5 раз в день. Наслаждаться!

Ссылка для онлайн-ответа теперь кажется javarepl.com/term.html, старая ссылка просто показывает ошибки Java.

Tony 06.10.2017 00:02

Существует простая среда IDE под названием DrJava, которая имеет консоль взаимодействия. Это работает именно так, как я ожидал. Просто загрузите файл и начните взаимодействовать с находящимися в нем объектами.

Java-REPL от Альберт Латач работает хорошо.

Вы можете попробовать это прямо в браузере здесь: http://www.javarepl.com/term.html

Исходный код доступен здесь, и у него есть достойный плагин Intelli-J.

https://github.com/albertlatacz/java-repl

Это часть OpenJDK 9!

REPL под названием JShell (разработанный Oracle) был выпущен как часть JDK 9.

Просто скачайте JDK 9 и запустите bin/jshell.

Screen shot of JShell

Ресурсы

Есть онлайн-REPL: http://www.javarepl.com/console.html

Печатать больше, чтобы достичь максимального количества символов ...

Для java 8 есть nudge4j. см. https://github.com/lorenzoongithub/nudge4j

nudge4j java repl

... и прелесть в том, что вы можете пилотировать свое приложение прямо из браузера

JPad - это блокнот Java со встроенным REPL:

C:\>jpad
       _ _____          _
      | |  __ \        | |
      | | |__) |_ _  __| |
  _   | |  ___/ _` |/ _` |
 | |__| | |  | (_| | (_| |
  \____/|_|   \__,_|\__,_|



Anything you type is evaluated as java.
The code is continuously appended until you call \clear.
Other Available Commands:
\exit - exit
\clear (n) - clear past java statements
\history - display all past java statements
\help - display this help

j>2+2
4
j>Math.sin(100.1)
-0.4177477
j>

Он также умеет сбрасывать коллекции, списки, карты и т. д. И позволяет отображать их в виде таблицы или диаграммы:

Java 9 предоставляет JShell.

jshell> println( "Print me!")
jshell> Print me!

Начиная с JDK 11, выпущенного в сентябре 2018 года, команда java позволяет запускать один файл исходного кода Java. См. Отчет об ошибке 8192920, а также JEP 330

Другие вопросы по теме