有没有类似 python 的交互式 REPL 模式,但对于 Java ?这样我就可以,例如,InetAddress.getAllByName( localHostName )
在一个窗口中输入,并立即得到结果,而无需所有这些 public static void nightmare() 东西?
29 回答
编辑 从 Java 9 开始就有JShell
原始答案如下
您还可以使用Groovy 控制台。它是一个交互式控制台,您可以在其中做您想做的事。由于 Groovy 还包括来自核心 Java 平台的类,因此您也可以使用这些类。
它看起来像这样:
Eclipse 有一个特性可以做到这一点,尽管它不是一个循环。它被称为“剪贴簿页面”。我假设这个类比应该是你有一个剪贴簿,你可以在其中收集一些代码片段。
无论如何,要使其工作,请在 Eclipse 中打开一个项目(您的剪贴簿页面将与一个项目相关联——当项目拥有东西时,Eclipse 喜欢它)。
然后:
- 在项目导航器窗口中,选择项目中某处存在的文件夹。
- 选择菜单文件 -> 新建 -> 其他,或按 Control-N。
- 选择 Java -> Java 运行/调试 -> 剪贴簿页面。
- 点击“下一步”,然后给它一个文件名,然后点击“完成”。
现在你有一个剪贴簿页面。键入一些代码,例如:
System.out.println(System.getProperties());
然后用鼠标选择文本,然后按 Control-U 或从上下文菜单中选择“执行”。代码将运行,输出将出现在控制台上。
您还可以键入表达式,选择它,然后从上下文菜单中选择显示。它将评估表达式并打印其类型。例如,运行 Display on1 + 2
将打印(int) 3
.
BeanShell 是一个小型、免费、可嵌入的 Java 源解释器,具有对象脚本语言功能,用 Java 编写。BeanShell 动态执行标准 Java 语法,并使用常见的脚本便利性对其进行扩展,例如松散类型、命令和方法闭包,如 Perl 和 JavaScript 中的那些。您可以交互式地使用 BeanShell 进行 Java 实验和调试,以及以新的方式扩展您的应用程序。脚本 Java 适用于各种应用程序,包括快速原型设计、用户脚本扩展、规则引擎、配置、测试、动态部署、嵌入式系统,甚至 Java 教育。
http://www.beanshell.org/manual/syntax.html#Standard_Java_Syntax
您可以使用 Eclipse 剪贴簿页面。
在 Eclipse 中创建一个剪贴簿页面。在您的项目中,新建-> 其他-> 剪贴簿页面。
在文件中,输入一些文本,选择它并按 ctrl-U,然后就可以了。
要管理您的导入,请在页面中右键单击并选择 Set Imports,您可以在其中选择导入包或单个类。这是持久的,并与页面一起保存。
老问题,但现在有一个更好的答案(2013 年 5 月)——java-REPL!它可以在github上获得,也可以在java-repl 网站上实时获得,以进行快速的一次性测试。
如果您获取 git hub 代码并运行ant
以生成工件,您可以使用以下小脚本使其易于使用:
#!/bin/sh
java -jar /home/rdahlgren/scripts/javarepl-dev.build.jar
自从找到这个项目以来,我可能每天使用它 5 次。享受!
似乎还没有人提到 Java (6, 7) 提供了一个名为jrunscript
. 它与语言无关(因此可以与 Jython、JRuby 等一起使用)。它默认为默认捆绑的 JavaScript (Rhino),并且与其他语言一样,您可以访问类路径上所有可用的包/对象。
它是 OpenJDK 9 的一部分!
一个名为JShell(由 Oracle 开发)的 REPL 已作为 JDK 9 的一部分发布。
只需下载 JDK 9,然后启动bin/jshell
.
资源
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])
作为 Groovy 的替代品,请尝试 Beanshell:http ://www.beanshell.org/
它更像 Java,并允许您直接使用 Java 语法。
Albert Latacz的 Java-REPL运行良好。
您可以在此处直接从浏览器尝试: http ://www.javarepl.com/term.html
源代码在这里可用,它有一个不错的 Intelli-J 插件。
Clojure 提供了一个可以使用的 REPL。
groovy 控制台允许您这样做。它实际上是为了尝试和测试 groovy 代码,但由于 groovy 是 Java 的超集,它也允许使用普通的 Java 代码。
我刚刚在控制台中输入了这个:
InetAddress.getAllByName('localhost')
并按 CTRL-R,然后它返回:
groovy> InetAddress.getAllByName('localhost')
Result: [localhost/127.0.0.1]
Scala还提供了一个交互式控制台。通过完全限定 InetAddress,我能够使用它来获得问题中表达式的结果,如下所示:
java.net.InetAddress.getAllByName("localhost")
虽然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-Enter 进行评估,你得到
{<<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,并将这些文件添加到类路径中。你也可以这样做
this.class.classLoader.rootLoader.addURL(new URL("file:///path to file"))
从外壳内加载其他罐子。
几年前我曾经使用 Jython 来满足您的要求。作为构建脚本的一部分,我生成了一个自定义 jython.bat 和 .py 文件,其中包含我正在处理的项目的完整类路径。这样,当我启动 Jython 时,它就会拥有所有可用的代码,并且它会启动 Spring 让我在实时系统中处理事情。你可以用 Groovy、JRuby、BeanShell 等做同样的事情。
大多数 IDE 都有一个类似于“即时模式”的窗口,可以让您即时评估 Java 代码。
您可以看看BlueJ,它是一个交互式 Java 开发环境,用于教授 OOP,而不是像 Eclipse 或 NetBeans 那样的完整 IDE。无论如何,玩起来很有趣。
您可以在YouTube上的一系列 Java 教程中看到它的实际应用。
DrJava是一个包含 REPL 窗格的教育 IDE。
还有一个 Eclipse 插件,但它对我不起作用。我想它只是有一段时间没有更新了。所以我通常做的是为“如果我这样做会发生什么”问题打开一个 DrJava 窗口。
EclipseShell 可能也不错,但我还没有使用它。
有一个名为DrJava的简单 IDE ,它有一个交互控制台。它完全按照我的预期工作。只需加载一个文件并开始与其中的对象进行交互。
有一个在线 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>
它也很聪明地转储集合、列表、地图等,并允许将它们呈现为表格或图表:
Java 9 提供了 JShell。
jshell> println( "Print me!")
jshell> Print me!
Jython、JIRB for JRuby、Groovy (groovyconsole et al) 和 Beanshell 都是可行的选择。
我用过InteractiveConsole
Jython,它在应用程序中运行良好。