MatchException
public
final
class
MatchException
extends RuntimeException
java.lang.Object | ||||
↳ | java.lang.Throwable | |||
↳ | java.lang.Exception | |||
↳ | java.lang.RuntimeException | |||
↳ | java.lang.MatchException |
Thrown to indicate an unexpected failure in pattern matching.
MatchException
may be thrown when an exhaustive pattern matching
language construct (such as a switch
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 patternsR(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 a cause
of the MatchException
. No suppressed
exceptions will be
recorded.
Summary
Public constructors | |
---|---|
MatchException(String message, Throwable cause)
Constructs an |
Inherited methods | |
---|---|
Public constructors
MatchException
public MatchException (String message, Throwable cause)
Constructs an MatchException
with the specified detail message and
cause.
Parameters | |
---|---|
message |
String : the detail message (which is saved for later retrieval
by the Throwable.getMessage() method). |
cause |
Throwable : the cause (which is saved for later retrieval by the
Throwable.getCause() method). (A null value is
permitted, and indicates that the cause is nonexistent or
unknown.) |