¿Hay algo así como el modo REPL interactivo de Python, pero para Java?

¿Hay algo así como el modo REPL interactivo de Python, pero para Java? De modo que puedo, por ejemplo, escribir InetAddress.getAllByName( localHostName ) en una ventana, e inmediatamente obtener resultados, sin toda esta pesadilla public static void nightmare ()?

También puedes usar Groovy Console . Es una consola interactiva donde puedes hacer lo que quieras. Dado que Groovy también incluye clases de la plataforma Java central, también podrá usar esas clases.

EDITAR

Se parece a esto:

Captura de pantalla de Groovy

Eclipse tiene una función para hacer esto, aunque no es un bucle. Se llama una “Página de Scrapbook”. Supongo que se supone que la analogía es que tienes un álbum de recortes donde recolectas pequeños fragmentos de código.

De todos modos, para que funcione, abre un proyecto en Eclipse (tu página de Scrapbook se asociará con un proyecto; a Eclipse le gusta cuando los proyectos son propios).

Entonces:

  1. En la ventana del navegador del proyecto, seleccione una carpeta que exista en algún lugar de su proyecto.
  2. Seleccione el menú Archivo -> Nuevo -> Otro, o presione Control-N.
  3. Seleccione Java -> Java Run / Debug -> Scrapbook Page.
  4. Presiona “Siguiente”, luego dale un nombre de archivo, luego presiona “Finalizar”.

Ahora tienes una página de álbum de recortes. Escriba algún código, como quizás esto:

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

A continuación, seleccione el texto con el mouse y presione Control-U o seleccione “Ejecutar” en el menú contextual. El código se ejecutará y la salida aparecerá en la consola.

También puede escribir una expresión, seleccionarla y seleccionar Mostrar en el menú contextual. Evaluará la expresión e imprimirá su tipo. Por ejemplo, ejecutar Display en 1 + 2 se imprimirá (int) 3 .

BeanShell es un intérprete de fuente de Java pequeño, gratuito e incrustable con funciones de lenguaje de escritura de objetos, escrito en Java. BeanShell ejecuta dinámicamente la syntax estándar de Java y la amplía con conveniencias comunes de creación de scripts, tales como tipos sueltos, comandos y cierres de métodos como los de Perl y JavaScript. Puede utilizar BeanShell interactivamente para la experimentación y depuración de Java, así como para extender sus aplicaciones de nuevas maneras. Scripting Java se presta a una amplia variedad de aplicaciones que incluyen creación rápida de prototipos, extensión de scripts de usuario, motores de reglas, configuración, pruebas, implementación dinámica, sistemas integrados e incluso educación Java.

http://www.beanshell.org/

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

Puede usar las páginas de Eclipse Scrapbook.

En Eclipse crea una página de Scrapbook. En su proyecto, Nueva-> Otro-> página de Scrapbook.

En el archivo, ingresa texto, selecciónalo y presiona ctrl-U, y listo.

Para administrar sus importaciones, haga clic con el botón derecho en la página y seleccione Establecer importaciones, donde puede elegir importar un paquete o una sola clase. Esto es persistente y se guarda con la página.

Una vieja pregunta, pero ahora hay una mejor respuesta (mayo de 2013) – java-REPL! Está disponible en github y también está disponible en vivo en el sitio web de java-repl para realizar pruebas únicas de forma rápida.

Si tomas el código de git hub y ejecutas el ant para generar los artefactos, puedes hacerlo fácil de usar con un pequeño script como:

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

Desde que encontré este proyecto, probablemente lo uso 5 veces al día. ¡Disfrutar!

Parece que nadie mencionó aún que Java (6, 7) envía una consola REPL llamada jrunscript . Es independiente del idioma (por lo que se puede usar con Jython, JRuby, etc.). Por defecto, es JavaScript (Rhino), que también viene incluido por defecto, y al igual que los otros idiomas, puede acceder a todos los paquetes / objetos disponibles en classpath.

Como alternativa a Groovy, pruebe Beanshell: http://www.beanshell.org/

Es más parecido a Java y le permite usar la syntax de Java directamente.

Jython es una implementación de Python que le permite inspeccionar e interactuar con objetos de 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]) 

¡Es parte de OpenJDK 9!

Se ha lanzado una REPL llamada JShell (desarrollada por Oracle) como parte de JDK 9.

Simplemente descargue JDK 9 y lance bin/jshell .

Captura de pantalla de JShell

Recursos

  • blogs.oracle.com: Inside JShell
  • DZone: Java 9 (Parte 2): JShell paso a paso
  • Proyecto OpenJDK Kulla
  • Propuesta de mejora de Java, JEP 222: jshell: Java Shell (Read-Eval-Print Loop)

Java-REPL de Albert Latacz funciona bien.

Puede probarlo directamente desde su navegador aquí: http://www.javarepl.com/term.html

El código fuente está disponible aquí, y tiene un plugin Intelli-J decente.

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

Clojure proporciona un REPL que puede usar.

La consola Groovy te permite hacer eso. En realidad, estaba destinado a probar y probar el código groovy, pero como Groovy es un superconjunto de Java, también permite Java.

Acabo de ingresar esto en la consola:

 InetAddress.getAllByName('localhost') 

y presiona CTRL-R, luego regresó:

 groovy> InetAddress.getAllByName('localhost') Result: [localhost/127.0.0.1] 

Scala también ofrece una consola interactiva. Pude usarlo para obtener un resultado para la expresión de tu pregunta al calificar InetAddress por completo, como en:

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

Mientras JRuby , BeanShell , REPL de Julian Fleischer están allí , REPL de Albert Latacz parece ser el último y activo.

Intenté con una definición de clase simple, funciona bien.

 $ 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); 

Para las personas con acceso a Mathematica, JLink le permite acceder a Java y a la secuencia de comandos con el código de Mathematica:

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

Presiona Shift-Enter para evaluar, y obtienes

 {<>} 

Luego puede usar la función Mapa de Mathematica para llamar a toString en los objetos devueltos:

 #@toString[]& /@ % 

para obtener el resultado (o para usar la syntax menos oscura, Map[Function[obj, obj@toString[]], %] ):

 {"localhost/127.0.0.1"} 

Si comienza a hablar en serio con esto, querrá leer el tutorial de Todd Gayley en http://reference.wolfram.com/mathematica/JLink/tutorial/Overview.html .

Si ya conoces a Groovy (que supongo que debes hacer, ya que mencionaste Groovy Console), entonces solo usa Groovysh o GroovyConsole, que están incluidas en la distribución de Groovy. Si tiene tarros personalizados que quiera importar, puede escribir un archivo por lotes que inicie groovysh / groovyConsole con los agregados a classpath. También puedes hacer esto

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

desde dentro del caparazón para cargar otros flasks.

Solía ​​usar Jython hace varios años para hacer exactamente lo que estás preguntando. Como parte de mi script de comstackción, generé un archivo personalizado jython.bat y .py que incluía el classpath completo para el proyecto en el que estaba trabajando. De esa forma, cuando comencé Jython, tendría todo el código disponible, y Spring me lo mostraría para dejarme mezclar cosas en el sistema en vivo. Puedes hacer lo mismo con Groovy, JRuby, BeanShell, etc.

puedes crear un script de Java usando jruby http://kenai.com/projects/jruby/pages/CallingJavaFromJRuby

La mayoría de los IDE tienen una ventana llamada algo así como “modo inmediato” que te permitirá evaluar el código de Java sobre la marcha.

Podrías echar un vistazo a BlueJ, que es un entorno de desarrollo Java interactivo destinado a enseñar OOP en lugar de un IDE completo como Eclipse o NetBeans. De todos modos, es divertido jugar con ellos.

Puedes verlo en acción en YouTube en una serie de tutoriales de Java.

DrJava es un IDE educativo que incluye un panel REPL.

También hay un plugin de Eclipse, pero no funcionó para mí. Creo que no se ha actualizado en mucho tiempo. Entonces, lo que generalmente hago es mantener abierta la ventana de DrJava para las preguntas “¿Qué sucede si hago esto?”.

EclipseShell podría ser bueno también, pero aún no lo he usado.

Beanshell 2

Hay un IDE simple llamado DrJava que tiene una consola de Interacciones. Funciona exactamente como yo esperaría. Simplemente cargue un archivo y comience a interactuar con los objetos en él.

Hay un REPL en línea: http://www.javarepl.com/console.html

Escribir más para llegar al límite de caracteres …

Para java 8, hay nudge4j. ver https://github.com/lorenzoongithub/nudge4j

nudge4j java repl

… y la belleza es que puedes pilotar tu aplicación desde el browsert

JPad es un scratchpad java con un REPL incorporado:

 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> 

También es inteligente sobre la eliminación de colecciones, listas, mapas, etc. y permite representarlos como una tabla o gráfico:

enter image description here

Java 9 proporciona JShell.

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

Jython, JIRB para JRuby, Groovy (groovyconsole et al) y Beanshell son todas opciones viables.

He usado InteractiveConsole for Jython, realmente funcionó bien en la aplicación.