- 所有已实现的接口:
-
Serializable
,Comparable<Snippet.Status>
,Constable
- 封装类:
-
Snippet
Status
随着状态的改变而改变。例如,使用 eval
创建另一个代码片段可能会解析此代码片段的依赖项(或使这些依赖项无效),或者 覆盖 此代码片段从而改变其 Status
。
与 Status
相关的重要属性有: isDefined()
,如果它对其他现有和新的代码片段可见; 以及 isActive()
,如果随着JShell状态的改变,代码片段将更新,可能会改变 Status
。只有处于 VALID
Status
的可执行代码片段才能被执行。
- 参见:
-
Nested Class Summary
Nested classes/interfaces declared in class java.lang.Enum
Enum.EnumDesc<E extends Enum<E>>
-
Enum Constant Summary
Enum ConstantDescription由于显式调用JShell.drop(Snippet)
,代码片段处于非活动状态。由于代码片段尚不存在,因此代码片段处于非活动状态。由于已被新代码片段替换,因此代码片段处于非活动状态。代码片段是一个声明代码片段,其主体中可能存在可恢复的未解决引用或其他问题(在当前JShell
状态下)。代码片段是一个声明代码片段,其主体中可能存在可恢复的未解决引用或其他问题(在当前JShell
状态下)。由于在初始评估时编译失败且无法通过对JShell状态的进一步更改而变为有效,因此代码片段处于非活动状态。代码片段是一个有效的代码片段(在当前JShell
状态下)。 -
Method Summary
Modifier and TypeMethodDescriptionboolean
isActive()
boolean
指示代码片段当前是否属于JShell的已定义状态。它是否对其他代码片段的编译可见?static Snippet.Status
返回具有指定名称的此类的枚举常量。static Snippet.Status[]
values()
返回按声明顺序包含此枚举类的常量的数组。
-
Enum Constant Details
-
VALID
代码片段是一个有效的代码片段(在当前JShell
状态下)。只有具有VALID
Status
的代码片段才能被执行(尽管并非所有VALID
代码片段都具有可执行代码)。代码片段已定义(
isDefined() == true
)。如果代码片段是声明或导入(Snippet.Kind.isPersistent()
),它对其他代码片段可见代码片段将随着依赖项的更改而更新(
isActive() == true
),其状态可能变为RECOVERABLE_DEFINED
、RECOVERABLE_NOT_DEFINED
、DROPPED
或OVERWRITTEN
。 -
RECOVERABLE_DEFINED
代码片段是一个声明代码片段,其主体中可能存在可恢复的未解决引用或其他问题(在当前JShell
状态下)。只有DeclarationSnippet
可以具有此Status
。代码片段具有有效的签名,对其他代码片段可见(
isDefined() == true
),因此可以在现有或新代码片段中引用该代码片段,但无法执行该代码片段。在尝试执行时,将抛出UnresolvedReferenceException
。代码片段将随着依赖项的更改而更新(
isActive() == true
),其状态可能变为VALID
、RECOVERABLE_NOT_DEFINED
、DROPPED
或OVERWRITTEN
。注意:
RECOVERABLE_DEFINED
和RECOVERABLE_NOT_DEFINED
都表示可能可恢复的错误,它们的区别在于对于RECOVERABLE_DEFINED
,代码片段是 已定义 的。 -
RECOVERABLE_NOT_DEFINED
代码片段是一个声明代码片段,其主体中可能存在可恢复的未解决引用或其他问题(在当前JShell
状态下)。只有DeclarationSnippet
可以具有此Status
。代码片段具有无效的签名或实现无法定义它。该代码片段对其他代码片段不可见(
isDefined() == false
),因此无法引用或执行。代码片段将随着依赖项的更改而更新(
isActive() == true
),其状态可能变为VALID
、RECOVERABLE_DEFINED
、DROPPED
或OVERWRITTEN
。注意:
RECOVERABLE_DEFINED
和RECOVERABLE_NOT_DEFINED
都表示可能可恢复的错误,它们的区别在于对于RECOVERABLE_DEFINED
,代码片段是 已定义 的。 -
DROPPED
由于显式调用JShell.drop(Snippet)
,代码片段处于非活动状态。代码片段对其他代码片段不可见(
isDefined() == false
),因此无法引用或执行。代码片段将不会随着依赖项的更改而更新(
isActive() == false
),其Status
将永远不会再次改变。 -
OVERWRITTEN
由于已被新代码片段替换,因此代码片段处于非活动状态。当使用eval
添加的新代码片段与先前的代码片段匹配时会发生这种情况。如果TypeDeclSnippet
与另一个TypeDeclSnippet
匹配,则名称匹配。例如class X { }
将覆盖class X { int ii; }
或interface X { }
。如果MethodSnippet
与另一个MethodSnippet
的名称和参数类型匹配,则匹配。例如void m(int a) { }
将覆盖int m(int a) { return a+a; }
。如果VarSnippet
与另一个VarSnippet
的名称匹配,则匹配。例如double z;
将覆盖long z = 2L;
。只有PersistentSnippet
可以具有此Status
。代码片段对其他代码片段不可见(
isDefined() == false
),因此无法引用或执行。代码片段将不会随着依赖项的更改而更新(
isActive() == false
),其Status
将永远不会再次改变。 -
REJECTED
由于在初始评估时编译失败且无法通过对JShell状态的进一步更改而变为有效,因此代码片段处于非活动状态。代码片段对其他代码片段不可见(
isDefined() == false
),因此无法引用或执行。代码片段将不会随着依赖项的更改而更新(
isActive() == false
),其Status
将永远不会再次改变。 -
NONEXISTENT
由于代码片段尚不存在,因此代码片段处于非活动状态。仅在新代码片段的SnippetEvent.previousStatus
中使用。JShell.status(Snippet)
永远不会返回此Status
。空洞地,
isDefined()
和isActive()
都定义为false
。
-
-
Method Details
-
values
返回按声明顺序包含此枚举类的常量的数组。- 返回:
- 包含此枚举类的常量的数组,按声明顺序排列
-
valueOf
返回具有指定名称的此类的枚举常量。字符串必须与用于在此类中声明枚举常量的标识符完全匹配。(不允许存在多余的空格字符。)- 参数:
-
name
- 要返回的枚举常量的名称。 - 返回:
- 具有指定名称的枚举常量
- 抛出:
-
IllegalArgumentException
- 如果此枚举类没有具有指定名称的常量 -
NullPointerException
- 如果参数为 null
-
isActive
public boolean isActive()指示代码片段是否活动,即当调用可能改变其状态的新JShell.eval(String)
或JShell.drop(Snippet)
时,是否会重新评估 持久 代码片段。这比isDefined()
更广泛,因为一个RECOVERABLE_NOT_DEFINED
的代码片段将被更新。- 返回:
-
如果代码片段活动,则返回
true
;否则返回false
-
isDefined
public boolean isDefined()指示代码片段当前是否属于JShell的已定义状态。它是否对其他代码片段的编译可见?- 返回:
-
如果代码片段已定义,则返回
true
;否则返回false
-