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

クラスMatchException

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

public final class MatchException extends RuntimeException
パターン・マッチングで予期しない障害を示すためにスローされました。

MatchExceptionは、完全なパターン一致言語構造(switch式など)で、実行時に指定されたパターンのいずれにも一致しない値が検出された場合、構成が完全とみなされていてもスローされます。 これは意図的なものであり、いくつかのケースから発生する可能性があります:

  • 個別のコンパイルの異常。パターンが参照するタイプ階層の一部が変更されたが、パターン・マッチングの構成は再コンパイルされていません。 たとえば、シール済インタフェースの実行時に許可されるサブタイプのセットがコンパイル時と異なる場合、または列挙型クラスに次のものがある場合実行時の列挙定数のセットがコンパイル時と異なるか、コンパイル時と実行時の間に互換性のない方法でタイプ階層が変更されたか。
  • null値およびシール済クラスを含むネストされたパターン。 たとえば、インタフェースIsealedで、2つの許可されたサブクラスAおよびBがあり、レコード・クラスRI型の単一のコンポーネントがある場合、2つのレコード・パターン R(A a)およびR(B b)は、R型に対して完全であるとみなされますが、これらのパターンはいずれもnew R(null)の結果とも一致しません。
  • null値およびネストされたレコード・パターン。 T型の単一コンポーネントを持つレコード・クラスSの場合(TString型の単一コンポーネントを持つ別のレコード・クラス)、ネストされたレコード・パターンR(S(var s))R型の完全とみなされますが、new R(null) (ただし、new R(new S(null))の結果と一致)の結果には一致しません。

MatchExceptionは、パターンに対して値と一致するパターン・プロセスによってスローされる場合もあります。 たとえば、レコード・パターンを含むパターン一致では、コンポーネント値を抽出するためにアクセサ・メソッドを暗黙的に呼び出す必要がある場合があります。 これらのアクセッサ・メソッドのいずれかが例外をスローすると、パターン一致が突然完了し、 MatchExceptionがスローされます。 元の例外は、MatchExceptioncauseとして設定されます。 suppressed例外は記録されません。

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

    • MatchException

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