在JShell中,如何评估整个java代码?
我正在使用JShell API来运行Java代码。然而,当我运行整个代码时,我出现了一个错误
例如:
import jdk.jshell.JShell;
var code= """
void hello(){
System.out.println("Hello world");
}
hello();
""";
JShell shell = JShell.create();
List<SnippetEvent> snippets = shell.eval(code);
经过计算,我在输出片段中看到了错误
cannot find symbol
symbol: method hello()
location: class
这里有什么问题
# 1 楼答案
eval
不是为处理这样的代码而设计的。你展示的代码实际上是两个“完整的片段”,在你进入eval
之前需要分解。从docs开始:“real”JShell命令行程序可能使用
SourceCodeAnalysis.analyzeCompletion(String)
方法将输入分解为两个完整的代码段,并将每个代码段传递到eval
下面是如何使用
SourceCodeAnalysis.analyzeCompletion(String)
:hello();
未能编译,原因与不编译
如果您查看诊断:
你会得到:
这正是在类级别进行方法调用时得到的错误消息
无论如何,要使代码正常工作,只需首先
eval
方法声明,然后eval
调用hello();