java.lang.Object
jdk.jshell.JShell
- 所有已实现的接口:
-
AutoCloseable
JShell评估状态引擎。这是JShell API中的中心类。一个
JShell
实例保存着不断演变的编译和执行状态。状态通过实例方法eval(String)
、drop(Snippet)
和addToClasspath(String)
来改变。大多数方法都是查询状态的。一个JShell
实例还允许使用onSnippetEvent(Consumer)
和onShutdown(Consumer)
注册事件,这些事件可以通过unsubscribe(Subscription)
来取消注册。通过sourceCodeAnalysis()
可以访问源代码分析工具。当完成时,实例应该关闭以释放资源 -- close()
。
使用JShell.create()
创建一个JShell
实例。
这个类不是线程安全的,除非另有说明,所有访问都应通过单个线程进行。
- 自JDK版本:
- 9
-
Nested Class Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
addToClasspath
(String path) 指定的路径被添加到eval()中使用的类路径的末尾。static JShell.Builder
builder()
JShell.Builder
的工厂方法,用于创建JShell
实例。void
close()
关闭此状态引擎。static JShell
create()
创建一个新的JShell状态引擎。diagnostics
(Snippet snippet) 返回最近一个片段评估的诊断信息。从状态中删除一个声明。评估输入的字符串,包括定义和/或执行(如果适用)。imports()
返回活动导入片段。methods()
返回活动方法片段。onShutdown
(Consumer<JShell> listener) 注册一个回调,当此JShell实例终止时调用。onSnippetEvent
(Consumer<SnippetEvent> listener) 注册一个回调,当片段的状态发生变化时调用。snippets()
返回所有片段。访问源代码分析功能。返回片段的状态。void
stop()
尝试停止当前正在运行的评估。types()
返回活动类型声明(类、接口、注解类型和枚举)片段。unresolvedDependencies
(DeclarationSnippet snippet) 对于RECOVERABLE_DEFINED
或RECOVERABLE_NOT_DEFINED
声明,片段当前未解析的依赖项的名称。void
unsubscribe
(JShell.Subscription token) 取消回调订阅。返回活动变量片段。varValue
(VarSnippet snippet) 获取变量的当前值。
-
Method Details
-
create
创建一个新的JShell状态引擎。也就是创建一个JShell
实例。- 返回:
-
一个
JShell
实例。 - 抛出:
-
IllegalStateException
- 如果无法创建JShell
实例。
-
builder
JShell.Builder
的工厂方法,用于创建JShell
实例。使用JShell.builder().build()
创建JShell
的默认实例。有关更多构建选项,请参见JShell.Builder
。- 返回:
-
一个
Builder
实例。 - 参见:
-
sourceCodeAnalysis
访问源代码分析功能。一个JShell
实例将始终从sourceCodeAnalysis()
返回相同的SourceCodeAnalysis
实例。- 返回:
-
一个可以用于源代码分析的
SourceCodeAnalysis
实例,例如完成检测和完成建议。
-
eval
评估输入的字符串,包括定义和/或执行(如果适用)。检查输入是否有错误,除非错误可以推迟(如一些未解析的依赖项引用的情况),否则错误将中止评估。- 参数:
-
input
- 要评估的输入字符串 - 返回:
- 由此评估直接或间接引起的事件列表。
- 抛出:
-
IllegalStateException
- 如果此JShell
实例已关闭。 - 参见:
-
drop
- 参数:
-
snippet
- 要删除的片段 - 返回:
- 从更新依赖于已删除片段的声明中产生的事件列表。
- 抛出:
-
IllegalStateException
- 如果此JShell
实例已关闭。 -
IllegalArgumentException
- 如果该片段与此JShell
实例不相关。
-
addToClasspath
指定的路径被添加到eval()中使用的类路径的末尾。请注意,未命名包在放置eval(String)
代码的包中是不可访问的。- 参数:
-
path
- 要添加到类路径的路径。 - 抛出:
-
IllegalStateException
- 如果此JShell
实例已关闭。
-
stop
public void stop()尝试停止当前正在运行的评估。当在eval(java.lang.String)
方法正在运行并且正在执行用户代码时调用时,将尝试停止用户代码。请注意,通常需要从与运行eval
方法的线程不同的线程中调用此方法。 -
close
public void close()关闭此状态引擎。释放资源。当不再需要此状态引擎时应调用此方法。- 实现接口:
-
close
在接口AutoCloseable
中
-
snippets
返回所有片段。- 返回:
- 按id顺序返回所有当前片段的片段。
-
variables
返回活动变量片段。这个便利方法等同于过滤snippets()
以获取status(snippet).isActive()
&& snippet.kind() == Kind.VARIABLE
并转换为VarSnippet
。- 返回:
- 活动声明的变量。
-
methods
返回活动方法片段。这个便利方法等同于过滤snippets()
以获取status(snippet).isActive()
&& snippet.kind() == Kind.METHOD
并转换为MethodSnippet。- 返回:
- 活动声明的方法。
-
types
返回活动类型声明(类、接口、注解类型和枚举)片段。此便利方法等同于snippets()
过滤status(snippet).isActive()
&& snippet.kind() == Kind.TYPE_DECL
并转换为TypeDeclSnippet。- 返回:
- 活动声明的类型声明。
-
imports
返回活动导入片段。此便利方法等同于snippets()
过滤status(snippet).isActive()
&& snippet.kind() == Kind.IMPORT
并转换为ImportSnippet。- 返回:
- 活动声明的导入声明。
-
status
返回片段的状态。这是通过显式eval()
调用或由依赖项触发的自动更新而更新的。- 参数:
-
snippet
- 要查找的Snippet
- 返回:
- 与此片段对应的状态
- 抛出:
-
IllegalStateException
- 如果此JShell
实例已关闭。 -
IllegalArgumentException
- 如果片段与此JShell
实例不相关。
-
diagnostics
返回片段最近评估的诊断信息。评估可以是由于显式eval()
调用或由依赖项触发的自动更新。- 参数:
-
snippet
- 要查找的Snippet
- 返回:
-
与此片段对应的诊断信息。这不包括在
unresolvedDependencies()
中报告的未解决依赖项引用。 - 抛出:
-
IllegalStateException
- 如果此JShell
实例已关闭。 -
IllegalArgumentException
- 如果片段与此JShell
实例不相关。
-
unresolvedDependencies
对于RECOVERABLE_DEFINED
或RECOVERABLE_NOT_DEFINED
声明,片段当前未解决依赖项的名称。当eval()
或另一个片段的eval()
或drop()
导致依赖项更新时,此方法的返回值可能会更改。- 参数:
-
snippet
- 要查找的声明Snippet
- 返回:
- 当前未解决依赖项的符号名称流。
- 抛出:
-
IllegalStateException
- 如果此JShell
实例已关闭。 -
IllegalArgumentException
- 如果片段与此JShell
实例不相关。
-
varValue
获取变量的当前值。- 参数:
-
snippet
- 要查询其值的变量Snippet。 - 返回:
- 由snippet引用的变量的当前值。
- 抛出:
-
IllegalStateException
- 如果此JShell
实例已关闭。 -
IllegalArgumentException
- 如果片段与此JShell
实例不相关。 -
IllegalArgumentException
- 如果变量的状态不是Snippet.Status.VALID
。
-
onSnippetEvent
public JShell.Subscription onSnippetEvent(Consumer<SnippetEvent> listener) throws IllegalStateException 注册回调以在片段状态更改时调用。每次调用都会添加一个新的订阅。- 参数:
-
listener
- 状态更改时执行的操作。 - 返回:
- 可用于取消订阅此订阅的令牌。
- 抛出:
-
IllegalStateException
- 如果此JShell
实例已关闭。
-
onShutdown
注册回调以在此JShell实例终止时调用。这可能是因为客户端进程已结束(例如调用System.exit(0))或连接已关闭,如通过close()。每次调用都会添加一个新的订阅。- 参数:
-
listener
- 状态终止时执行的操作。 - 返回:
- 可用于取消订阅此订阅的令牌。
- 抛出:
-
IllegalStateException
- 如果此JShell实例已关闭
-
unsubscribe
取消回调订阅。- 参数:
-
token
- 要取消订阅的订阅对应的令牌。
-