- java.lang.Object
-
- jdk.jshell.JShell
-
- All Implemented Interfaces:
-
AutoCloseable
public class JShell extends Object implements AutoCloseable
JShell评估状态引擎。 这是JShell API中的中心类。 一个JShell
实例支持不断发展的编译和执行状态。 状态与实例方法改变eval(String)
,drop(Snippet)
和addToClasspath(String)
。 大多数方法查询状态。 AJShell
实例还允许使用onSnippetEvent(Consumer)
和onShutdown(Consumer)
注册事件,这些事件已注销了unsubscribe(Subscription)
。 访问源分析实用程序是通过sourceCodeAnalysis()
。 完成后,应关闭实例以释放资源 -close()
。实例
JShell
与创建JShell.create()
。这个类不是线程安全的,除了注意到,所有访问都应该通过单个线程。
- 从以下版本开始:
- 9
-
-
Nested Class Summary
Nested Classes Modifier and Type Class 描述 static class
JShell.Builder
Builder为JShell
实例。class
JShell.Subscription
订阅是引用订阅的标记,因此它们可以是 unsubscribed 。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 void
addToClasspath(String path)
指定的路径被添加到eval()中使用的类路径的末尾。static JShell.Builder
builder()
JShell.Builder
工厂方法,反过来,用于创建JShell
实例。void
close()
关闭这个状态引擎。static JShell
create()
创建一个新的JShell状态引擎。Stream<Diag>
diagnostics(Snippet snippet)
返回片段最近评估的诊断。List<SnippetEvent>
drop(Snippet snippet)
从状态中移除声明。List<SnippetEvent>
eval(String input)
评估输入字符串,包括定义和/或执行(如果适用)。Stream<ImportSnippet>
imports()
返回活动的导入片段。Stream<MethodSnippet>
methods()
返回活动方法代码段。JShell.Subscription
onShutdown(Consumer<JShell> listener)
当JShell实例终止时,注册要调用的回调。JShell.Subscription
onSnippetEvent(Consumer<SnippetEvent> listener)
当代码段的状态更改时,注册要调用的回调。Stream<Snippet>
snippets()
返回所有片段。SourceCodeAnalysis
sourceCodeAnalysis()
访问源代码分析功能。Snippet.Status
status(Snippet snippet)
返回该片段的状态。void
stop()
尝试停止当前运行的评估。Stream<TypeDeclSnippet>
types()
返回活动类型声明(类,接口,注释类型和枚举)片段。Stream<String>
unresolvedDependencies(DeclarationSnippet snippet)
对于RECOVERABLE_DEFINED
或RECOVERABLE_NOT_DEFINED
声明,代码片段的当前未解析的依赖关系的名称。void
unsubscribe(JShell.Subscription token)
取消回拨订阅。Stream<VarSnippet>
variables()
返回活动变量片段。String
varValue(VarSnippet snippet)
获取变量的当前值。
-
-
-
方法详细信息
-
create
public static JShell create() throws IllegalStateException
- 结果
-
一个
JShell
。 - 异常
-
IllegalStateException
- 如果无法创建JShell
实例。
-
builder
public static JShell.Builder builder()
JShell.Builder
工厂方法,反过来,用于创建JShell
实例。 创建的默认实例JShell
与JShell.builder().build()
。 有关更多施工选项,请参阅JShell.Builder
。- 结果
-
一个
Builder
。 - 另请参见:
-
JShell.Builder
-
sourceCodeAnalysis
public SourceCodeAnalysis sourceCodeAnalysis()
访问源代码分析功能。JShell
一个实例将始终从sourceCodeAnalysis()
返回相同的SourceCodeAnalysis
实例。- 结果
-
一个
SourceCodeAnalysis
的实例,可用于源分析,如完成检测和完成建议。
-
eval
public List<SnippetEvent> eval(String input) throws IllegalStateException
评估输入字符串,包括定义和/或执行(如果适用)。 检查输入错误,除非可以延迟错误(如某些未解析的依赖关系引用的情况),错误将中止评估。输入应该是一个完整的源代码片段,即一个表达式,语句,变量声明,方法声明,类声明或导入。 要将任意输入打破成个别的完整片段,请使用
SourceCodeAnalysis.analyzeCompletion(String)
。对于进口,添加导入。 类,接口。 定义方法和变量。 执行变量,语句和表达式的初始化。 修饰符public,protected,private,static和final在op级别声明中不允许,并且会被警告忽略。 同步的,原生的,抽象的和默认的顶级方法是不允许的,并且是错误。 如果声明的先前定义被覆盖,那么会有一个事件显示其状态更改为OVERWRITTEN,这不会发生丢弃,被拒绝或已被覆盖的声明。
如果执行环境不正常,则默认情况下,如果评估的代码导致执行环境终止,则此
JShell
实例将关闭,但调用进程和VM保持有效。- 参数
-
input
- 要评估的输入字符串 - 结果
- 由该评估直接或间接引起的事件清单。
- 异常
-
IllegalStateException
- 如果这个JShell
实例是关闭的。 - 另请参见:
-
SourceCodeAnalysis.analyzeCompletion(String)
,onShutdown(java.util.function.Consumer)
-
drop
public List<SnippetEvent> drop(Snippet snippet) throws IllegalStateException
- 参数
-
snippet
- 要删除的代码段 - 结果
- 根据放置的代码段更新声明的事件列表。
- 异常
-
IllegalStateException
- 如果这个JShell
实例是关闭的。 -
IllegalArgumentException
- 如果该片段未与此JShell
实例相关联。
-
addToClasspath
public void addToClasspath(String path)
指定的路径被添加到eval()中使用的类路径的末尾。 请注意,从放置eval(String)
代码的软件包中无法访问未命名的软件包。- 参数
-
path
- 添加到类路径的路径。 - 异常
-
IllegalStateException
- 如果此JShell
实例已关闭。
-
stop
public void stop()
尝试停止当前运行的评估。 当eval(java.lang.String)
方法正在运行并且正在执行用户的代码时调用时,将尝试停止用户的代码。 请注意,通常,这种方法需要与运行eval
方法的线程不同的线程调用。如果
eval(java.lang.String)
方法没有运行,什么都不做。在某些情况下,停止用户代码的尝试可能会失败,这可能包括执行在I / O操作中被阻止时,或者当用户的代码捕获
ThreadDeath
异常时。
-
close
public void close()
关闭这个状态引擎。 释放资源。 当这种状态引擎不再需要时,应该被调用。- Specified by:
-
close
在接口AutoCloseable
-
variables
public Stream<VarSnippet> variables()
返回活动变量片段。 这个方便方法相当于snippets()
过滤status(snippet).isActive()
&& snippet.kind() == Kind.VARIABLE
并转换为VarSnippet
。- 结果
- 主动声明的变量。
-
methods
public Stream<MethodSnippet> methods()
返回活动方法代码段。 这种方便方法相当于snippets()
过滤status(snippet).isActive()
&& snippet.kind() == Kind.METHOD
并转换为MethodSnippet。- 结果
- 主动声明的方法。
-
types
public Stream<TypeDeclSnippet> types()
返回活动类型声明(类,接口,注释类型和枚举)片段。 这种方便方法相当于snippets()
过滤status(snippet).isActive()
&& snippet.kind() == Kind.TYPE_DECL
并转换为TypeDeclSnippet。- 结果
- 活动声明的类型声明。
-
imports
public Stream<ImportSnippet> imports()
返回活动的导入片段。 这种方便方法相当于snippets()
过滤status(snippet).isActive()
&& snippet.kind() == Kind.IMPORT
并转换为ImportSnippet。- 结果
- 主动声明的进口声明。
-
status
public Snippet.Status status(Snippet snippet)
返回该片段的状态。 这是由于显式eval()
调用或依赖关系触发的自动更新而更新。- 参数
-
snippet
- 查询Snippet
- 结果
- 与此代码段相对应的状态
- 异常
-
IllegalStateException
- 如果这个JShell
实例是关闭的。 -
IllegalArgumentException
- 如果该片段未与此JShell
实例相关联。
-
diagnostics
public Stream<Diag> diagnostics(Snippet snippet)
返回片段最近评估的诊断。 评估可能是因为显式的eval()
调用或依赖关系触发的自动更新。- 参数
-
snippet
- 查询Snippet
- 结果
-
与此代码段相对应的诊断。
这不包括
unresolvedDependencies()
报告的未解析的unresolvedDependencies()
。 - 异常
-
IllegalStateException
- 如果这个JShell
实例是关闭的。 -
IllegalArgumentException
- 如果该片段未与此JShell
实例相关联。
-
unresolvedDependencies
public Stream<String> unresolvedDependencies(DeclarationSnippet snippet)
对于RECOVERABLE_DEFINED
或RECOVERABLE_NOT_DEFINED
声明,代码片段的当前未解析的依赖关系的名称。 对于给定的方法,此方法的返回值可能会在另一个代码段的eval()
或drop()
导致更新依赖关系时更改。- 参数
-
snippet
- 申报Snippet
查询 - 结果
- 当前未解析依赖关系的符号名称流。
- 异常
-
IllegalStateException
- 如果这个JShell
实例是关闭的。 -
IllegalArgumentException
- 如果该片段未与此JShell
实例相关联。
-
varValue
public String varValue(VarSnippet snippet) throws IllegalStateException
获取变量的当前值。- 参数
-
snippet
- 查询其值的变量代码段。 - 结果
- 由片段引用的变量的当前值。
- 异常
-
IllegalStateException
- 如果此JShell
实例已关闭。 -
IllegalArgumentException
- 如果该片段未与此JShell
实例相关联。 -
IllegalArgumentException
- 如果变量的状态是Snippet.Status.VALID
。
-
onSnippetEvent
public JShell.Subscription onSnippetEvent(Consumer<SnippetEvent> listener) throws IllegalStateException
当代码段的状态更改时,注册要调用的回调。 每个呼叫都添加一个新的订阅。- 参数
-
listener
- 状态更改时执行的操作。 - 结果
- 一个令牌,可用于此订阅 unsubscribe 。
- 异常
-
IllegalStateException
- 如果这个JShell
实例是关闭的。
-
onShutdown
public JShell.Subscription onShutdown(Consumer<JShell> listener) throws IllegalStateException
当JShell实例终止时,注册要调用的回调。 这是因为客户端进程已经结束(例如称为System.exit(0))或连接已关闭,如close()。 每个呼叫都添加一个新的订阅。- 参数
-
listener
- 状态终止时执行的操作。 - 结果
- 一个可用于 unsubscribe此订阅的令牌。
- 异常
-
IllegalStateException
- 如果此JShell实例已关闭
-
unsubscribe
public void unsubscribe(JShell.Subscription token)
取消回拨订阅。- 参数
-
token
- 与订阅相对应的令牌将被取消订阅。
-
-