Module  jdk.jshell
软件包  jdk.jshell

Enum Snippet.Status

  • All Implemented Interfaces:
    SerializableComparable<Snippet.Status>
    Enclosing class:
    Snippet


    public static enum Snippet.Status
    extends Enum<Snippet.Status>
    描述代码段的当前状态。 这是JShell状态下的Snippet的动态属性,因此使用query on {@code JShell}进行检索。

    随着状态的变化, Status发生变化。 例如,使用eval创建另一个代码片段可能会解决此代码段的依赖关系(或使这些依赖关系无效),或overwrite此代码段更改其Status

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

    另请参见:
    JShell.status(jdk.jshell.Snippet)
    • Enum Constant Detail

      • VALID

        public static final Snippet.Status VALID
        该片段是有效的片段(在当前的JShell状态的上下文中)。 只有片段VALID Status可以执行(虽然不是全部VALID片段具有可执行代码)。

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

        该片段将更新为家属变化( isActive() == true ),其地位可能成为RECOVERABLE_DEFINEDRECOVERABLE_NOT_DEFINEDDROPPED ,或OVERWRITTEN

      • RECOVERABLE_DEFINED

        public static final Snippet.Status RECOVERABLE_DEFINED
        该片段是一个声明片段,具有潜在可恢复的未解析引用或其主体的其他问题(在当前的JShell状态的上下文中)。 只有DeclarationSnippet可以有这个Status

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

        该片段将更新为家属变化( isActive() == true ),其地位可能成为VALIDRECOVERABLE_NOT_DEFINEDDROPPED ,或OVERWRITTEN

        注意: RECOVERABLE_DEFINEDRECOVERABLE_NOT_DEFINED表示可能的可恢复错误,它们的区别在于RECOVERABLE_DEFINED ,代码段为defined

      • RECOVERABLE_NOT_DEFINED

        public static final Snippet.Status RECOVERABLE_NOT_DEFINED
        该片段是具有潜在可恢复的未解析引用或其他问题的声明片段(在当前的JShell状态的上下文中)。 只有DeclarationSnippet可以有这个Status

        该片段具有无效的签名,否则实现无法定义。 该片段对其他片段( isDefined() == false )不可见,因此不能被引用或执行。

        该片段将更新为家属变化( isActive() == true ),其地位可能成为VALIDRECOVERABLE_DEFINEDDROPPED ,或OVERWRITTEN

        注意: RECOVERABLE_DEFINEDRECOVERABLE_NOT_DEFINED表示潜在的可恢复错误,它们的区别在于RECOVERABLE_DEFINED ,代码段为defined

      • OVERWRITTEN

        public static final Snippet.Status OVERWRITTEN
        该代码段已被替换为新的代码段,因此无效。 当添加了JShell.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将永远不会再更改。

    • 方法详细信息

      • values

        public static Snippet.Status[] values​()
        按照它们声明的顺序返回一个包含此枚举类型常量的数组。 该方法可用于遍历常量如下:
          for (Snippet.Status c : Snippet.Status.values())
            System.out.println(c); 
        结果
        一个包含这个枚举类型的常量的数组,按照它们被声明的顺序
      • valueOf

        public static Snippet.Status valueOf​(String name)
        以指定的名称返回此类型的枚举常量。 字符串必须完全匹配用于声明此类型的枚举常量的标识符。 (不允许使用外来空白字符。)
        参数
        name - 要返回的枚举常量的名称。
        结果
        具有指定名称的枚举常数
        异常
        IllegalArgumentException - 如果此枚举类型没有指定名称的常量
        NullPointerException - 如果参数为空
      • isDefined

        public boolean isDefined​()
        指示该片段是否是JShell的已定义状态的一部分。 编译其他片段可以看到吗?
        结果
        true如果Snippet被定义; 否则false