モジュール java.base
パッケージ java.lang

クラスMatchException

すべての実装されたインタフェース:
Serializable

public final class MatchException extends RuntimeException
MatchExceptionは、JavaプラットフォームのプレビューAPIです。
プレビュー機能が有効な場合のみ、プログラムでMatchExceptionを使用できます。
プレビュー機能は、今後のリリースで削除するか、Javaプラットフォームの永続機能にアップグレードすることができます。
パターン・マッチングで予期しない障害を示すためにスローされました。

実行時に指定されたパターンのいずれにも一致しない値が(switch式など)で検出されると、MatchExceptionがスローされることがあります。 これはいくつかのケースから発生する可能性があります:

  • 別個のコンパイル異常。封印されたインタフェースの実行時に使用可能なサブタイプのセットがコンパイル時とは異なる場合、列挙型はコンパイル時とは異なる定数のセットを持つか、タイプ階層はコンパイル時と実行時の間に互換性のない方法で変更されています。
  • null値および封印タイプを使用したネストされたパターン。 インタフェースまたは抽象クラスCAおよびBを許可するように封印されている場合、レコード・パターンR(A a)およびR(B b)のセットは、単独コンポーネントがC型であるレコードR完全ですが、これらのパターンのいずれもnew R(null)と一致しません。
  • NULLのターゲットおよびネストされたレコード・パターン。 唯一のコンポーネントがSであるレコード・タイプRがあり、これが唯一のコンポーネントがStringであるレコードである場合、ネストされたレコード・パターンR(S(String s))new R(null)に一致しません。

予期しない入力によって発生する一致の失敗は、通常、すべてのパターンが試行された後にのみMatchExceptionをスローします。R(S(String s))new R(null)と一致しない場合でも、後のパターン(R rなど)がターゲットと一致する可能性があります。

MatchExceptionは、パターン一致の一部として実行された演算が予期しない例外をスローする場合にもスローされます。 たとえば、パターン一致によって、パターン・バインディングを抽出するためにレコード・コンポーネント・アクセサなどのメソッドが暗黙的に起動される場合があります。 これらのメソッドが例外をスローすると、パターン一致構成の実行がMatchExceptionで失敗する可能性があります。 元の例外は、MatchExceptioncauseとして設定されます。 suppressed例外は記録されません。

Java言語仕様を参照してください:
「14.11.3 switch文の実行」
「14.30.2 パターン・マッチング」
「15.28.2 switch式の実行時評価」
導入されたバージョン:
19
関連項目:
  • コンストラクタの詳細

    • MatchException

      public MatchException(String message, Throwable cause)
      指定された詳細メッセージおよび原因を使用してMatchExceptionを構築します。
      パラメータ:
      message - 詳細メッセージ(あとでThrowable.getMessage()メソッドで取得できるように保存される)。
      cause - 原因(あとでThrowable.getCause()メソッドで取得できるように保存される)。 (null値が許可されており、原因が存在しないか不明であることを示す。)