模块 jdk.jshell

枚举类枚举类 Snippet.Status

java.lang.Object
java.lang.Enum <Snippet.Status >
jdk.jshell.Snippet.Status
所有已实现的接口:
Serializable , Comparable<Snippet.Status> , Constable
封闭类:
Snippet

public static enum Snippet.Status extends Enum <Snippet.Status >
描述片段的当前状态。这是 JShell 状态中 Snippet 的动态属性——因此使用 查询JShell 检索。

Status 随着状态的变化而变化。例如,使用 eval 创建另一个片段可能会解决此片段的依赖项(或使这些依赖项无效),或者 覆盖 此片段更改其 Status

Status 相关的重要属性是: isDefined() ,如果它对其他现有和新片段可见;和 isActive() ,如果随着 JShell 状态的变化,代码片段将更新,可能会改变 Status 。可执行代码片段只有在 VALID Status 中才能执行。

参见:
  • 枚举常量详细信息

    • VALID

      public static final Snippet.Status  VALID
      该片段是一个有效的片段(在当前 JShell 状态的上下文中)。只能执行带有 VALID Status 的片段(尽管并非所有 VALID 片段都有可执行代码)。

      片段已定义 (isDefined() == true )。如果该片段是声明或导入(Snippet.Kind.isPersistent() ),则它对其他片段可见

      代码段将随着依赖项更改 (isActive() == true ) 更新,其状态可能变为 RECOVERABLE_DEFINEDRECOVERABLE_NOT_DEFINEDDROPPEDOVERWRITTEN

    • RECOVERABLE_DEFINED

      public static final Snippet.Status  RECOVERABLE_DEFINED
      该片段是一个声明片段,其正文中可能存在可恢复的未解决引用或其他问题(在当前 JShell 状态的上下文中)。只有 DeclarationSnippet 才能拥有这个 Status

      该代码段具有有效签名,并且对其他代码段 (isDefined() == true ) 可见,因此可以在现有或新代码段中引用,但无法执行该代码段。 UnresolvedReferenceException 将在尝试执行它时抛出。

      该片段将随着依赖项的更改 (isActive() == true ) 更新,其状态可能变为 VALIDRECOVERABLE_NOT_DEFINEDDROPPEDOVERWRITTEN

      注意: RECOVERABLE_DEFINEDRECOVERABLE_NOT_DEFINED 都表示潜在的可恢复错误,它们的不同之处在于,对于 RECOVERABLE_DEFINED ,片段是 定义的

    • RECOVERABLE_NOT_DEFINED

      public static final Snippet.Status  RECOVERABLE_NOT_DEFINED
      该片段是一个声明片段,其中包含可能可恢复的未解决引用或其他问题(在当前 JShell 状态的上下文中)。只有 DeclarationSnippet 才能拥有这个 Status

      该代码段具有无效签名或实现无法定义它。该代码段对其他代码段 (isDefined() == false ) 不可见,因此无法引用或执行。

      该代码段将随着依赖项更改 (isActive() == true ) 更新,其状态可能变为 VALIDRECOVERABLE_DEFINEDDROPPEDOVERWRITTEN

      注意: RECOVERABLE_DEFINEDRECOVERABLE_NOT_DEFINED 都表示潜在的可恢复错误,它们的不同之处在于,对于 RECOVERABLE_DEFINED ,片段是 定义的

    • DROPPED

      public static final Snippet.Status  DROPPED
      由于对 JShell.drop(Snippet) 的显式调用,该代码段处于非活动状态。

      该片段对其他片段 (isDefined() == false ) 不可见,因此无法引用或执行。

      该片段不会随着依赖项的更改而更新 (isActive() == false ),其 Status 将永远不会再次更改。

    • OVERWRITTEN

      public static final Snippet.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

      public static final Snippet.Status  REJECTED
      该代码段处于非活动状态,因为它在初始评估时编译失败,并且无法随着 JShell 状态的进一步更改而变得有效。

      该片段对其他片段 (isDefined() == false ) 不可见,因此无法引用或执行。

      该片段不会随着依赖项的更改而更新 (isActive() == false ),其 Status 将永远不会再次更改。

    • NONEXISTENT

      public static final Snippet.Status  NONEXISTENT
      该代码段处于非活动状态,因为它尚不存在。仅在 SnippetEvent.previousStatus 中用于新片段。 JShell.status(Snippet) 永远不会返回这个 Status

      空洞地,isDefined() isActive() 都被定义为 false

  • 方法详情

    • values

      public static Snippet.Status [] values()
      返回一个数组,其中包含此枚举类的常量,按照它们声明的顺序排列。
      返回:
      包含此枚举类常量的数组,按照它们声明的顺序排列
    • valueOf

      public static Snippet.Status  valueOf(String  name)
      返回具有指定名称的此类的枚举常量。字符串必须匹配确切地用于在此类中声明枚举常量的标识符。 (不允许使用无关的空白字符。)
      参数:
      name - 要返回的枚举常量的名称。
      返回:
      具有指定名称的枚举常量
      抛出:
      IllegalArgumentException - 如果此枚举类没有具有指定名称的常量
      NullPointerException - 如果参数为空
    • isActive

      public boolean isActive()
      指示片段是否处于活动状态,即当调用可能更改其状态的新JShell.eval(String) JShell.drop(Snippet) 时,是否会重新评估persistent片段。这比 isDefined() 更广泛,因为 RECOVERABLE_NOT_DEFINED 的片段将被更新。
      返回:
      true 如果代码段处于活动状态;否则false
    • isDefined

      public boolean isDefined()
      指示片段当前是否是 JShell 定义状态的一部分。其他片段的编译是否可见?
      返回:
      true 如果代码段已定义;否则false