有没有像Python的交互式REPL模式,但对于Java?
有没有像Python的交互式REPL模式,但对于Java? 所以,我可以,例如,在窗口中键入InetAddress.getAllByName( localHostName )
,并立即获得结果,没有所有这个公共静态void nightmare()的东西?
您也可以使用Groovy控制台 。 这是一个交互式控制台,你可以做你想做的事情。 由于Groovy也包含了来自Java核心平台的类,所以你也可以使用这些类。
编辑
它看起来像这样:
Eclipse有这个function,虽然它不是一个循环。 这就是所谓的“剪贴簿页面”。 我想这个比喻应该是你有一个剪贴簿,你收集一些代码片段。
无论如何,为了使它工作,在Eclipse中打开一个项目(你的剪贴簿页面将与一个项目相关 – 当项目拥有的东西时,Eclipse喜欢它)。
然后:
- 在项目导航器窗口中,select一个文件夹存在于你的项目中的某个地方。
- select菜单File – > New – > Other,或点击Control-N。
- selectJava – > Java运行/debugging – >剪贴簿页面。
- 点击“下一步”,然后给它一个文件名,然后点击“完成”。
现在你有一个剪贴簿页面。 键入一些代码,也许这样:
System.out.println(System.getProperties());
然后用鼠标select文本,然后点击Control-U或从上下文菜单中select“Execute”。 代码将运行,输出将显示在控制台上。
您还可以键入expression式,select它并从上下文菜单中select“显示”。 它会评估expression式并打印它的types。 例如,在1 + 2
上运行显示将打印(int) 3
。
BeanShell是一个小型,免费,可embedded的Java源解释器,具有对象脚本语言function,用Java编写。 BeanShelldynamic地执行标准的Java语法,并通过普通的脚本方便的方式来扩展它,比如松散的types,命令,和像Perl和JavaScript那样的方法闭包。 您可以交互使用BeanShell进行Java实验和debugging,并以新的方式扩展您的应用程序。 脚本Java适用于各种各样的应用程序,包括快速原型,用户脚本扩展,规则引擎,configuration,testing,dynamic部署,embedded式系统甚至Java教育。
http://www.beanshell.org/manual/syntax.html#Standard_Java_Syntax
您可以使用Eclipse Scrapbook页面。
在Eclipse中创build一个剪贴簿页面。 在你的项目中,新build – >其他 – >剪贴簿页面。
在文件中,input一些文本,select它,然后按Ctrl-U,然后你就可以开始了。
要pipe理您的导入,请右键单击页面,然后select设置导入,您可以在其中select导入包或单个类。 这是持久的,并保存在页面中。
老问题,但现在有更好的答案(2013年5月) – java-REPL! 它在github上可用,也可以在java-repl网站上进行快速一次性testing。
如果您抓住git hub代码并运行ant
来生成工件,则可以使用以下小脚本来轻松使用它:
#!/bin/sh java -jar /home/rdahlgren/scripts/javarepl-dev.build.jar
自从find这个项目我可能每天使用它5次。 请享用!
似乎没有人提到Java(6,7)发布了一个名为jrunscript
的REPL控制台。 这是语言不可知的(所以可以使用Jython,JRuby等)。 它默认为默认捆绑的JavaScript(Rhino),和其他语言一样,您可以访问类path中可用的所有包/对象。
作为Groovy的替代方法,请尝试Beanshell: http : //www.beanshell.org/
它更像Java,允许您直接使用Java语法。
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])
Clojure提供了一个可以使用的REPL。
Albert Latacz的 Java-REPL运行良好。
您可以直接从您的浏览器尝试它: http : //www.javarepl.com/console.html
源代码在这里可用,它有一个体面的Intelli-J插件。
Groovy控制台可以让你做到这一点。 它实际上是试图testinggroovy代码,但由于groovy是Java的超集,所以它也允许纯Java的东西。
我刚刚进入控制台:
InetAddress.getAllByName('localhost')
并按CTRL-R,然后返回:
groovy> InetAddress.getAllByName('localhost') Result: [localhost/127.0.0.1]
斯卡拉还提供了一个交互式控制台。 我可以通过完全限定InetAddress来使用它来获得expression式的结果,如下所示:
java.net.InetAddress.getAllByName("localhost")
这是OpenJDK 9的一部分!
一个名为JShell的REPL(由Oracle开发)已经作为JDK 9的一部分发布。
只需下载JDK 9,然后启动bin/jshell
。
资源
- blogs.oracle.com:JShell内部
- DZone:Java 9(Part 2):JShell分步
- OpenJDK项目Kulla
- Java增强build议, JEP 222:jshell:Java Shell(Read-Eval-Print Loop)
虽然JRuby , BeanShell , Julian Fleischer的REPL在那里, Albert Latacz的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);
对于可以访问Mathematica的人员,JLink允许您使用Mathematica代码访问Java和脚本:
Needs["JLink`"] LoadJavaClass["java.net.InetAddress"] InetAddress`getAllByName["localhost"]
按Shift – input评估,你会得到
{<<JavaObject[java.net.Inet4Address>>}
然后你可以使用Mathematica的Map函数在返回的对象上调用toString
:
#@toString[]& /@ %
得到结果(或使用较不明显的语法, Map[Function[obj, obj@toString[]], %]
):
{"localhost/127.0.0.1"}
如果你开始认真对待这个问题,你可以在http://reference.wolfram.com/mathematica/JLink/tutorial/Overview.html阅读Todd Gayley的教程。
如果您已经知道Groovy(我假设您这么做了,因为您提到了Groovy控制台),那么只需使用Groovy发行版中包含的groovysh或groovyConsole即可。 如果您有要导入的自定义JAR,则可以编写一个启动groovysh / groovyConsole的batch file以及添加到类path的batch file。 你也可以做到这一点
this.class.classLoader.rootLoader.addURL(new URL("file:///path to file"))
从壳内加载其他jar子。
我几年前曾经使用过Jython来做你正在问的问题。 作为我的构build脚本的一部分,我生成了一个自定义jython.bat和.py文件,其中包含我正在处理的项目的完整类path。 这样,当我开始Jython的时候,它将拥有所有可用的代码,并且它会引起Spring让我在实际的系统中缠住东西。 你可以用Groovy,JRuby,BeanShell等做同样的事情
是的,有: http : //www.scravy.de/blog/2012-02-27/a-read-eval-print-loop-for-java.htm
大多数IDE都有一个名为“即时模式”的窗口,它允许您即时评估Java代码。
您可以看看BlueJ ,它是一个交互式Java开发环境,用于教授OOP,而不是象Eclipse或NetBeans这样的完整IDE。 无论如何,玩这个游戏真好玩。
您可以通过一系列Java教程在YouTube上看到它。
DrJava是包含REPL窗格的教育IDE。
还有一个Eclipse插件,但它并没有为我工作。 我认为它只是一段时间没有更新。 所以我通常会做一个DrJava窗口,为“如果我这样做会发生什么”问题开放。
EclipseShell可能也不错,但我还没有使用它。
Beanshell 2
有一个叫DrJava的简单的IDE,它有一个Interactions控制台。 它工作正如我所料。 只需加载一个文件,并开始与其中的对象进行交互。
有一个在线REPL: http : //www.javarepl.com/console.html
键入更多以达到字符限制…
JPad是一个内置REPL的java暂存器:
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>
倾销collections,列表,地图等也是很明智的,并允许将它们呈现为表格或图表:
Java 9提供了JShell。
jshell> println( "Print me!") jshell> Print me!
Jython,JRuby的JIRB ,Groovy(groovyconsole等)和Beanshell都是可行的select。
我已经使用InteractiveConsole
进行Jython,它在应用程序中确实很好地工作。