java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
java.lang.MatchException
- すべての実装されたインタフェース:
Serializable
public final class MatchException extends RuntimeException
パターン・マッチングで予期しない障害を示すためにスローされました。
MatchException
は、完全なパターン一致言語構造(switch
式など)で、実行時に指定されたパターンのいずれにも一致しない値が検出された場合、構成が完全とみなされていてもスローされます。 これは意図的なものであり、いくつかのケースから発生する可能性があります:
- 個別のコンパイルの異常。パターンが参照するタイプ階層の一部が変更されたが、パターン・マッチングの構成は再コンパイルされていません。 たとえば、シール済インタフェースの実行時に許可されるサブタイプのセットがコンパイル時と異なる場合、または列挙型クラスに次のものがある場合実行時の列挙定数のセットがコンパイル時と異なるか、コンパイル時と実行時の間に互換性のない方法でタイプ階層が変更されたか。
null
値およびシール済クラスを含むネストされたパターン。 たとえば、インタフェースI
がsealed
で、2つの許可されたサブクラスA
およびB
があり、レコード・クラスR
にI
型の単一のコンポーネントがある場合、2つのレコード・パターンR(A a)
およびR(B b)
は、R
型に対して完全であるとみなされますが、これらのパターンはいずれもnew R(null)
の結果とも一致しません。null
値およびネストされたレコード・パターン。T
型の単一コンポーネントを持つレコード・クラスS
の場合(T
はString
型の単一コンポーネントを持つ別のレコード・クラス)、ネストされたレコード・パターンR(S(var s))
はR
型の完全とみなされますが、new R(null)
(ただし、new R(new S(null))
の結果と一致)の結果には一致しません。
MatchException
は、パターンに対して値と一致するパターン・プロセスによってスローされる場合もあります。 たとえば、レコード・パターンを含むパターン一致では、コンポーネント値を抽出するためにアクセサ・メソッドを暗黙的に呼び出す必要がある場合があります。 これらのアクセッサ・メソッドのいずれかが例外をスローすると、パターン一致が突然完了し、 MatchException
がスローされます。 元の例外は、MatchException
のcause
として設定されます。 suppressed
例外は記録されません。
- Java言語仕様を参照してください:
-
「14.11.3
switch
文の実行」
「14.30.2 パターン・マッチング」
「15.28.2switch
式の実行時の評価」 - 導入されたバージョン:
- 21
- 関連項目:
-
コンストラクタのサマリー
コンストラクタ説明MatchException
(String message, Throwable cause) 指定された詳細メッセージおよび原因を使用してMatchException
を構築します。 -
メソッドのサマリー
クラスjava.lang.Throwableで宣言されたメソッド
addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
-
コンストラクタの詳細
-
MatchException
指定された詳細メッセージおよび原因を使用してMatchException
を構築します。- パラメータ:
message
- 詳細メッセージ(あとでThrowable.getMessage()
メソッドで取得できるように保存される)。cause
- 原因(あとでThrowable.getCause()
メソッドで取得できるように保存される)。 (null
値が許可されており、原因が存在しないか不明であることを示す。)
-