- 封装类:
-
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
实例。
-