Class MatchException

java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
java.lang.MatchException
All Implemented Interfaces:
Serializable

public final classMatchExceptionextendsRuntimeException
Thrown to indicate an unexpected failure in pattern matching.

MatchException may be thrown when an exhaustive pattern matching language construct (such as aswitch expression) encounters a value that does not match any of the specified patterns at run time, even though the construct has been deemed exhaustive. This is intentional and can arise from a number of cases:

  • Separate compilation anomalies, where parts of the type hierarchy that the patterns reference have been changed, but the pattern matching construct has not been recompiled. For example, if a sealed interface has a different set of permitted subtypes at run time than it had at compile time, or if an enum class has a different set of enum constants at runtime than it had at compile time, or if the type hierarchy has been changed in some incompatible way between compile time and run time.
  • null values and nested patterns involving sealed classes. If, for example, an interfaceI issealed with two permitted subclassesA andB, and a record classR has a single component of typeI, then the two record patterns R(A a) andR(B b) together are considered to be exhaustive for the typeR, but neither of these patterns will match against the result ofnew R(null).
  • null values and nested record patterns. Given a record classS with a single component of typeT, whereT is another record class with a single component of typeString, then the nested record patternR(S(var s)) is considered exhaustive for the typeR but it does not match against the result ofnew R(null) (whereas it does match against the result ofnew R(new S(null)) does).

MatchException may also be thrown by the process of pattern matching a value against a pattern. For example, pattern matching involving a record pattern may require accessor methods to be implicitly invoked in order to extract the component values. If any of these accessor methods throws an exception, pattern matching completes abruptly and throws MatchException. The original exception will be set as acause of theMatchException. Nosuppressed exceptions will be recorded.

SeeJava Language Specification:
14.11.3 Execution of aswitch Statement
14.30.2 Pattern Matching
15.28.2 Run-Time Evaluation ofswitch Expressions
Since:
21
See Also:
  • Constructor Details

    • MatchException

      public MatchException(String message,Throwable cause)
      Constructs anMatchException with the specified detail message and cause.
      Parameters:
      message - the detail message (which is saved for later retrieval by theThrowable.getMessage() method).
      cause - the cause (which is saved for later retrieval by theThrowable.getCause() method). (Anull value is permitted, and indicates that the cause is nonexistent or unknown.)