- 封装类:
-
JShell
JShell实例的构建器。通过使用此类上的setter方法创建JShell的自定义实例。在这之后,使用build()方法创建一个JShell实例。这些方法都可以链接在一起。例如,设置远程输出和错误流:
JShell myShell =
JShell.builder()
.out(myOutStream)
.err(myErrStream)
.build(); 如果不需要特殊设置,只需使用JShell.builder().build()或快捷方式JShell.create()。
-
Method Summary
Modifier and TypeMethodDescriptionbuild()构建一个JShell状态引擎。compilerOptions(String... options) 添加编译器选项。console(JShellConsole console) 设置运行评估的控制台。err(PrintStream err) 设置运行评估的错误输出(为System.err)。executionEngine(String executionControlSpec) 设置用于执行的自定义引擎。executionEngine(ExecutionControlProvider executionControlProvider, Map<String, String> executionControlParameters) 设置用于执行的自定义引擎。配置用于编译和源代码分析的FileManager。idGenerator(BiFunction<Snippet, Integer, String> generator) 设置用于片段标识名称生成的生成器。in(InputStream in) 设置运行评估的输入(为System.in)。out(PrintStream out) 设置运行评估的输出(为System.out)。remoteVMOptions(String... options) 设置用于启动VM的附加选项。tempVariableNameGenerator(Supplier<String> generator) 设置用于VarSnippet的临时变量名称生成器。
-
Method Details
-
in
设置运行评估的输入(为System.in)。注意:使用System.in进行片段或其他用户输入的应用程序不能将System.in用作远程进程的输入流。InputStream的read方法可能会抛出InterruptedIOException以表示用户取消了输入。当前正在运行的片段将自动停止。如果未设置此项,默认情况下将提供一个空输入流——
new ByteArrayInputStream(new byte[0])。- 参数:
-
in- 要传输到远程执行过程中的System.in的InputStream - 返回:
-
Builder实例(用于链接初始化)
-
out
设置运行评估的输出(为System.out)。控制进程和远程进程可以共享System.out。如果未设置此项,默认情况下为
System.out。- 参数:
-
out- 要传输到远程执行过程中的System.out的PrintStream - 返回:
-
Builder实例(用于链接初始化)
-
err
设置运行评估的错误输出(为System.err)。控制进程和远程进程可以共享System.err。如果未设置此项,默认情况下为
System.err。- 参数:
-
err- 要传输到远程执行过程中的System.err的PrintStream - 返回:
-
Builder实例(用于链接初始化)
-
console
设置运行评估的控制台。如果未设置此项,默认情况下为无控制台(在运行片段时
System.console()将返回null)。- 参数:
-
console- 在运行片段时要使用的控制台 - 返回:
-
Builder实例(用于链接初始化) - 自JDK版本:
- 21
-
tempVariableNameGenerator
设置用于VarSnippet的临时变量名称生成器。除非有明确需要,否则不要使用此方法。
生成器将用于新创建的VarSnippet实例。变量的名称通过
PersistentSnippet.name()查询。回调在处理片段时发送,JShell状态不稳定。不能从回调中对
JShell实例进行任何调用。生成的名称必须在活动片段中是唯一的。
默认行为(如果未设置或
generator为null)是将名称生成为带有前缀美元符号("$")的顺序号。- 参数:
-
generator- 用于生成临时变量名称字符串的Supplier或null - 返回:
-
Builder实例(用于链接初始化)
-
idGenerator
设置用于片段标识名称生成的生成器。除非有明确需要,否则不要使用此方法。
生成器将用于新创建的Snippet实例。标识名称(id)通过
Snippet.id()访问,并且可以在EvalException和UnresolvedReferenceException的StackTraceElement.getFileName()中看到。生成器的输入是
Snippet和一个整数。对于会覆盖彼此的两个片段,整数将相同,否则是唯一的。回调在处理片段时发送,片段和整体状态都不稳定。不应进行更改系统状态(包括片段状态)的调用。可以查询片段,但不能对
Snippet.id()进行调用。不能从回调中对JShell实例进行任何调用,除非是对status(Snippet)的调用。默认行为(如果未设置或
generator为null)是将id生成为转换为字符串的整数。- 参数:
-
generator- 用于生成id字符串的BiFunction或null - 返回:
-
Builder实例(用于链接初始化)
-
remoteVMOptions
设置用于启动VM的附加选项。- 参数:
-
options- 远程VM的选项 - 返回:
-
Builder实例(用于链接初始化)
-
compilerOptions
添加编译器选项。这些额外选项将用于编译器的解析、分析和代码生成调用。干扰结果的选项不受支持,并且对JShell的操作具有未定义的影响。- 参数:
-
options- 编译器调用的附加选项 - 返回:
-
Builder实例(用于链接初始化)
-
executionEngine
设置用于执行的自定义引擎。片段执行将由指定的ExecutionControl实例提供。在这些重载的executionEngine构建器方法中最多使用一个。- 参数:
-
executionControlSpec- 执行控制规范,已在jdk.jshell.spi包文档中记录。 - 返回:
-
Builder实例(用于链接初始化)
-
executionEngine
public JShell.Builder executionEngine(ExecutionControlProvider executionControlProvider, Map<String, String> executionControlParameters) 设置用于执行的自定义引擎。片段执行将由指定的ExecutionControl实例提供。在这些重载的executionEngine构建器方法中最多使用一个。- 参数:
-
executionControlProvider- 用于提供执行引擎的提供程序 -
executionControlParameters- 提供程序的参数,或null表示默认参数 - 返回:
-
Builder实例(用于链接初始化)
-
fileManager
public JShell.Builder fileManager(Function<StandardJavaFileManager, StandardJavaFileManager> mapping) 配置用于编译和源代码分析的FileManager。如果未设置或传递null,则将使用编译器的标准文件管理器(身份映射)。用于特殊应用程序中需要覆盖编译器正常文件处理的情况。有关更多信息,请参阅文件管理器API。- 参数:
-
mapping- 给定编译器的标准文件管理器,返回要使用的文件管理器的函数 - 返回:
-
Builder实例(用于链接初始化)
-
build
构建一个JShell状态引擎。这是所有JShell功能的入口点。这将创建一个用于执行的远程进程。因此,关闭返回的实例非常重要。- 返回:
- 状态引擎
- 抛出:
-
IllegalStateException- 如果无法创建JShell实例。
-