Чи є щось на зразок інтерактивного режиму REPL від python, але для Java?


92

Чи є щось на зразок інтерактивного режиму REPL від python, але для Java? Так що я можу, наприклад, ввести InetAddress.getAllByName( localHostName )вікно і негайно отримати результати, без усієї цієї публічної статичної порожнечі кошмару ()?



3
Java представляє це в JDK-9 : JEP 222: jshell: Оболонка Java
Не помилка

Відповіді:


64

редагувати З Java 9 існує JShell

Оригінальна відповідь далі

Ви також можете використовувати Groovy Console . Це інтерактивна консоль, де ви можете робити те, що хочете. Оскільки Groovy також включає класи з базової платформи Java, ви також зможете використовувати ці класи.

Це виглядає так:

Знімок екрана Groovy


Знімок екрана більше не існує на imageshack.

Що особливо приємно в консолі groovy, так це те, що за замовчуванням імпортується набагато більше пакетів (наприклад, java.util. *), Тому вам не потрібно писати стільки операторів імпорту
Dónal

2
Для тих, кому лінь встановлювати Groovy, тут доступна онлайн-версія цієї консолі: groovyconsole.appspot.com . Деякі бібліотеки JDK недоступні (наприклад, введення / виведення та System.exit()), але для більшості цілей це повинно бути достатнім.
Dónal

Це не приймає занять, це нормально? class test{public static void test(){System.out.println('test')}}
Лайм

52

Eclipse має особливість робити це, хоча це не петля. Це називається "Сторінка записів". Я припускаю, що аналогія повинна полягати в тому, що у вас є записки, де ви збираєте маленькі фрагменти коду.

У будь-якому разі, щоб змусити це працювати, відкрийте проект у Eclipse (ваша Сторінка записів буде пов’язана з проектом - Eclipse любить, коли проекти володіють речами).

Тоді:

  1. У вікні навігатора проекту виберіть папку, яка існує десь у вашому проекті.
  2. Або виберіть меню Файл -> Створити -> Інше, або натисніть Control-N.
  3. Виберіть Java -> Java Run / Debug -> Scrapbook Page.
  4. Натисніть "Далі", надайте йому ім'я файлу, а потім натисніть "Готово".

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

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

Потім виділіть текст мишкою та натисніть Control-U або виберіть "Виконати" у контекстному меню. Код буде запущений, а вивід з’явиться на консолі.

Ви також можете ввести вираз, вибрати його та вибрати контекстне меню. Він оцінить вираз і надрукує його тип. Наприклад, запуск дисплея 1 + 2увімкне друк (int) 3.


1
Дякую за це. Beanshell вичерпував час для мене, але це працює чудово.
Bayard Randel

3
Я використовую Eclipse так довго, але не знав про це, дякую!
Тобольд

28

BeanShell - це невеликий безкоштовний вбудований інтерпретатор джерел Java із функціями мови сценаріїв об’єктів, написаний на Java. BeanShell динамічно виконує стандартний синтаксис Java і розширює його загальними зручностями сценаріїв, такими як вільні типи, команди та закриття методів, як у Perl та JavaScript. Ви можете використовувати BeanShell інтерактивно для експериментів і налагодження на Java, а також для розширення своїх програм новими способами. Сценарії Java піддаються широкому спектру програм, включаючи швидке прототипування, розширення сценаріїв користувача, механізми правил, конфігурацію, тестування, динамічне розгортання, вбудовані системи та навіть освіту Java.

http://www.beanshell.org/

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


Існують також інтерактивні оболонки Jython та JRuby для менш детального синтаксису.
баккал

1
BeanShell активно підтримується як beahell 2 - code.google.com/p/beanshell2
hshib

Простий приклад запуску beahell з командного рядка можна знайти тут
Brad Parks

@hshib: Зараз у Github, і останній коміт - з 2013 року. Це не "активно підтримується".
Мартін Шредер,

@ MartinSchröder, цей коментар був у 2013 році :-)
hshib

19

Ви можете використовувати сторінки Eclipse Scrapbook.

У Eclipse створіть сторінку записів. У вашому проекті Нове-> Інше-> Сторінка записів.

У файл введіть текст, виділіть його та натисніть ctrl-U, і ось.

Щоб керувати імпортом, клацніть правою кнопкою миші на сторінці та виберіть Набір імпорту, де ви зможете імпортувати пакет або один клас. Це постійно і зберігається разом із сторінкою.


3
Як би це не було корисно, сторінка записок не є постійним сеансом, тому насправді не працює як REPL.
MHarris

19

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

Якщо ви взяли код hit hub і запустили antгенерувати артефакти, ви можете зробити це простим у використанні за допомогою невеликого скрипту, такого як:

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

Оскільки я знайшов цей проект, я, мабуть, використовую його 5 разів на день. Насолоджуйтесь!


Здається, посилання на онлайн- репл є javarepl.com/term.html, старе посилання просто відображає помилки Java.
Тоні

13

Здається, ще ніхто не згадував, що Java (6, 7) постачає консоль REPL з назвою jrunscript. Це мовна агностика (тому може використовуватися з Jython, JRuby тощо). За замовчуванням використовується JavaScript (Rhino), який також входить до комплекту за замовчуванням, і, як і інші мови, ви можете отримати доступ до всіх пакунків / об’єктів, доступних на шляху до класу.


12

Це частина OpenJDK 9!

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

Просто завантажте JDK 9 і запустіть bin/jshell.

Знімок екрану JShell

Ресурси


11

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

Він більш схожий на Java і дозволяє використовувати Java-синтаксис безпосередньо.


чи зберігається бобова шкаралупа вже?
rogerdpack

1
BeanShell активно підтримується як beahell 2 - code.google.com/p/beanshell2
hshib

@hshib: Ні. Останній коміт на github - з 2013 року.
Мартін Шредер,

11

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])



7

Консоль заводний дозволяє зробити це. Насправді він мав спробувати протестувати groovy код, але оскільки groovy є надмножиною Java, він також дозволяє звичайні речі на Java.

Я щойно ввів це в консоль:

InetAddress.getAllByName('localhost')

і натиснув CTRL-R, потім повернулось:

groovy> InetAddress.getAllByName('localhost')

Result: [localhost/127.0.0.1]

7

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

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

6

Поки 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);

3

Для людей, які мають доступ до 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 .


2

Якщо ви вже знаєте Groovy (що, я гадаю, ви знаєте, оскільки ви вже згадали Groovy Console), тоді просто використовуйте groovysh або groovyConsole, які входять до дистрибутива Groovy. Якщо у вас є спеціальні банки, які ви хочете імпортувати, ви можете написати командний файл, який запускає 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

groovy також завантажить всю бібліотеку в ~ / .groovy / lib, ви можете або скопіювати туди речі, або скористатися символічними посиланнями
Джейсон



1

У більшості IDE є вікно, що називається щось на зразок "негайного режиму", що дозволить вам оцінювати код Java на льоту.


Eclipse має вигляд "відображення", який близький до того, що я хочу. Проблема в тому, що це має бути в контексті запущеного додатка. Мені потрібно запустити програму, зупинитися на точці зупинки, і лише тоді я можу вводити те, що хочу.
Йоні Ройт,

@YoniRoit IMHO Мені подобається "дисплей" + режим налагодження краще, ніж командний рядок REPL. Я давно використовував REPL з Python, тому я зробив і те, і інше. Я думаю, що набагато краще написати Unit Test і поставити точку розриву і пограти з бажаним контекстом, вставляючи назад будь-який код, що працює назад, в unit test. Отримати точний контекст у простому REPL набагато складніше, ніж сказати Unit Test.
Адам Гент

1

Ви можете поглянути на BlueJ, яке є інтерактивним середовищем розробки Java, призначеним для навчання ООП, а не повною IDE, такою як Eclipse або NetBeans. Так чи інакше весело гратись.

Ви можете побачити це в дії на YouTube у серії підручників Java.


це цікаво. Bluej - це як опис. Це не дуже корисно для речей, для яких ви зараз використовуєте repl, але ви можете використовувати його для створення прототипу вашого дизайну oo, як для використання прототипу методу.
Білл К

1

DrJava - це освітня IDE, яка включає область REPL.

Існує також плагін Eclipse, але він у мене не спрацював. Я думаю, що він просто не оновлювався протягом деякого часу. Отже, я зазвичай тримаю відкритим вікно DrJava для питань "що станеться, якщо я це зроблю".

EclipseShell, можливо, теж непоганий, але я ще не використовував його.



1

Існує проста IDE під назвою DrJava, яка має консоль взаємодії. Це працює точно так, як я очікував. Просто завантажте файл і починайте взаємодіяти з об’єктами в ньому.




1

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>

Це також розумно щодо скидання колекцій, списків, карт тощо і дозволяє відображати їх як таблицю або діаграму:

введіть тут опис зображення



0

Jython, JIRB для JRuby, Groovy (groovyconsole та ін.) Та Beanshell - це життєздатні варіанти.

Я використовував InteractiveConsoleдля Jython, він дійсно чудово працював у додатку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.