列挙型クラスClassFile.StackMapsOption

java.lang.Object
java.lang.Enum<ClassFile.StackMapsOption>
java.lang.classfile.ClassFile.StackMapsOption
すべての実装されたインタフェース:
Serializable, ClassFile.Option, Comparable<ClassFile.StackMapsOption>, Constable
含まれているインタフェース:
ClassFile

public static enum ClassFile.StackMapsOption extends Enum<ClassFile.StackMapsOption> implements ClassFile.Option
スタック・マップを生成するかどうかを説明するオプションです。 デフォルトはSTACK_MAPS_WHEN_REQUIREDで、スタック・マップを生成するか、互換性がある場合は既存のマップを再利用します。

StackMapTableAttributeは、Code属性から導出されたプロパティで、Java Virtual Machineが1回で検証を実行できるようにします。 したがって、CodeModelの一部としてモデル化されるのではなく、スタック・マップ生成を介してオンデマンドで計算されます。

「アクセスできないコード」またはレガシーの「ジャンプ・ルーチン」命令がある場合は、スタック・マップの生成がIllegalArgumentExceptionで失敗する可能性があります。 DROP_STACK_MAPSオプションを使用すると、ユーザーはStackMapTableAttributeCodeBuilderに指定することで、独自のスタック・マップを提供できます。

Java Virtual Machine仕様を参照してください:
「4.10.1 タイプ・チェックによる検証」
導入されたバージョン:
24
関連項目:
  • ネストされたクラスのサマリー

    Enumクラスで宣言されたネストされたクラス/インタフェース

    Enum.EnumDesc<E>
    修飾子と型
    クラス
    説明
    static final class 
    Enum.EnumDesc<E extends Enum<E>>
    enum定数の「名目記述子」
  • 列挙型定数のサマリー

    列挙型定数
    列挙型定数
    説明
    スタック・マップ生成を実行しないでください。
    スタック・マップの生成を強制的に実行します。
    スタック・マップを生成するか、互換性がある場合は既存のマップを再利用します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    指定された名前を持つこのクラスのenum定数を返します。
    この列挙クラスの定数を含む配列を宣言されている順序で 返します。

    Enumクラスで宣言されたメソッド

    clone, compareTo, describeConstable, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
    修飾子と型
    メソッド
    説明
    protected final Object
    CloneNotSupportedExceptionをスローします。
    final int
    このenumと指定されたオブジェクトの順序を比較します。
    このインスタンスの列挙型記述子EnumDescを返します(作成可能な場合)。作成できない場合は空のOptionalを返します。
    final boolean
    equals(Object other)
    指定されたオブジェクトがこのenum定数と同じ場合は、trueを返します。
    protected final void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    最終決定は削除のために非推奨になりました。
    このenum定数のenum型に対応するClassオブジェクトを返します。
    final int
    このenum定数のハッシュ・コードを返します。
    final String
    enum宣言で宣言されているとおりのenum定数の名前を返します。
    final int
    列挙定数の序数(列挙宣言での位置。初期定数はゼロの序数に割り当てられる)を返します。
    宣言に含まれるとおりのenum定数の名前を返します。
    static <T extends Enum<T>>
    T
    valueOf(Class<T> enumClass, String name)
    指定された名前の指定されたenumクラスのenum定数を返します。

    クラスオブジェクトで宣言されたメソッド

    getClass, notify, notifyAll, wait, wait, wait
    修飾子と型
    メソッド
    説明
    final Class<?>
    このObjectの実行時クラスを返します。
    final void
    このオブジェクトのモニターで待機中のスレッドを1つ再開します。
    final void
    このオブジェクトのモニターで待機中のすべてのスレッドを再開します。
    final void
    現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。
    final void
    wait(long timeoutMillis)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
    final void
    wait(long timeoutMillis, int nanos)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
  • 列挙型定数の詳細

    • STACK_MAPS_WHEN_REQUIRED

      public static final ClassFile.StackMapsOption STACK_MAPS_WHEN_REQUIRED
      スタック・マップを生成するか、互換性がある場合は既存のマップを再利用します。 スタック・マップは、メジャー・バージョン50以上に存在します。 これらのバージョンでは、コード配列および例外ハンドラが変換後にまだ互換性がある場合、CodeBuilderは互換性のあるスタック・マップ情報を再利用しようとします。それ以外の場合は、スタック・マップ生成を実行します。 ただし、メジャー・バージョンが50の場合、スタック・マップと互換性のないジャンプ・サブルーチン命令がcode配列に存在することを許可するので、高速には失敗しません。
    • GENERATE_STACK_MAPS

      public static final ClassFile.StackMapsOption GENERATE_STACK_MAPS
      スタック・マップの生成を強制的に実行します。 これにより、スタック・マップ生成が無条件で実行され、なんらかの理由で生成に失敗すると、高速に失敗します。
    • DROP_STACK_MAPS

      public static final ClassFile.StackMapsOption DROP_STACK_MAPS
      スタック・マップ生成を実行しないでください。 コードにブランチまたは例外ハンドラがある場合は、ユーザーは独自のStackMapTableAttributeCodeBuilderに指定する必要があります。そうしないと、生成されたコードの検証(JVMS 4.10.1)が失敗します。

      このオプションは、ユーザー指定のStackMapTableAttributeが考慮されるために必要です。 既存のCode属性のスタック・マップは、このオプションを使用して次のように再利用できます:

      CodeAttribute code = method.findAttribute(Attributes.code()).orElseThrow();
      // Note that StackMapTable may be absent, representing code with no branching
      code.findAttribute(Attributes.stackMapTable()).ifPresent(cob);
      

  • メソッドの詳細

    • values

      public static ClassFile.StackMapsOption[] values()
      この列挙クラスの定数を含む配列を宣言されている順序で 返します。
      戻り値:
      この列挙クラスの定数を宣言されている順序で含む配列
    • valueOf

      public static ClassFile.StackMapsOption valueOf(String name)
      指定された名前を持つこのクラスのenum定数を返します。 文字列は、このクラスでenum定数を宣言するために使用される識別子と正確に一致する必要があります。 (不適切な空白文字は許可されません。)
      パラメータ:
      name - 返される列挙型定数の名前。
      戻り値:
      指定された名前を持つ列挙型定数
      スロー:
      IllegalArgumentException - この列挙型クラスに指定された名前の定数がない場合
      NullPointerException - 引数がnullの場合