Stay organized with collections
Save and categorize content based on your preferences.
MatchException
class MatchException : RuntimeException
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 interface I
is sealed
with two permitted subclasses A
and B
, and a record class R
has a single component of type I
, then the two record patterns R(A a)
and R(B b)
together are considered to be exhaustive for the type R
, but neither of these patterns will match against the result of new R(null)
.
null
values and nested record patterns. Given a record class S
with a single component of type T
, where T
is another record class with a single component of type String
, then the nested record pattern R(S(var s))
is considered exhaustive for the type R
but it does not match against the result of new R(null)
(whereas it does match against the result of new 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 |
Constructs an MatchException with the specified detail message and cause.
|
Public constructors
MatchException
MatchException(
message: String!,
cause: Throwable!)
Constructs an MatchException
with the specified detail message and cause.
Parameters |
message |
String!: the detail message (which is saved for later retrieval by the getMessage() method). |
cause |
Throwable!: the cause (which is saved for later retrieval by the getCause() method). (A null value is permitted, and indicates that the cause is nonexistent or unknown.) |
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2025-03-13 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-03-13 UTC."],[],[],null,["# MatchException\n\nAdded in [API level 36](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)\n\nMatchException\n==============\n\n```\nclass MatchException : RuntimeException\n```\n\n|---|---|---|---|-------------------------------|\n| [kotlin.Any](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html) |||||\n| ↳ | [kotlin.Throwable](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html) ||||\n| | ↳ | [java.lang.Exception](/reference/kotlin/java/lang/Exception) |||\n| | | ↳ | [java.lang.RuntimeException](/reference/kotlin/java/lang/RuntimeException) ||\n| | | | ↳ | [java.lang.MatchException](#) |\n\nThrown to indicate an unexpected failure in pattern matching.\n\n`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:\n\n- 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.\n- `null` values and nested patterns involving sealed classes. If, for example, an interface `I` is `sealed` with two permitted subclasses `A` and `B`, and a record class `R` has a single component of type `I`, then the two record patterns `R(A a)` and `R(B b)` together are considered to be exhaustive for the type `R`, but neither of these patterns will match against the result of `new R(null)`.\n- `null` values and nested record patterns. Given a record class `S` with a single component of type `T`, where `T` is another record class with a single component of type `String`, then the nested record pattern `R(S(var s))` is considered exhaustive for the type `R` but it does not match against the result of `new R(null)` (whereas it does match against the result of `new R(new S(null))` does).\n\n`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](/reference/kotlin/java/lang/Throwable#getCause()) of the `MatchException`. No [suppressed](/reference/kotlin/java/lang/Throwable#addSuppressed(kotlin.Throwable)) exceptions will be recorded.\n\nSummary\n-------\n\n| Public constructors ||\n|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|\n| [MatchException](#MatchException(kotlin.String,%20kotlin.Throwable))`(`message:` `[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)!`, `cause:` `[Throwable](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)!`)` Constructs an `MatchException` with the specified detail message and cause. |\n\nPublic constructors\n-------------------\n\n### MatchException\n\nAdded in [API level 36](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels) \n\n```\nMatchException(\n message: String!, \n cause: Throwable!)\n```\n\nConstructs an `MatchException` with the specified detail message and cause.\n\n| Parameters ||\n|-----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `message` | [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)!: the detail message (which is saved for later retrieval by the [getMessage()](/reference/kotlin/java/lang/Throwable#getMessage()) method). |\n| `cause` | [Throwable](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html)!: the cause (which is saved for later retrieval by the [getCause()](/reference/kotlin/java/lang/Throwable#getCause()) method). (A `null` value is permitted, and indicates that the cause is nonexistent or unknown.) |"]]