java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
java.lang.MatchException
- 所有已实现的接口:
-
Serializable
用于指示模式匹配中的意外失败的异常。
MatchException
在运行时遇到一个值,该值不匹配任何指定模式时可能会被抛出,即使该构造已被视为是穷尽的。这是有意的,并且可能出现在以下几种情况下:
- 分开编译的异常,模式引用的类型层次结构的部分已更改,但模式匹配构造未重新编译。例如,如果一个密封接口在运行时具有与编译时不同的允许的子类型集,或者如果一个枚举类在运行时具有与编译时不同的枚举常量集,或者如果类型层次结构在编译时和运行时之间以某种不兼容的方式发生了更改。
null
值和涉及密封类的嵌套模式。例如,如果一个接口I
被sealed
,具有两个允许的子类A
和B
,并且一个记录类R
具有一个类型为I
的单个组件,则两个记录模式R(A a)
和R(B b)
被认为对类型R
是穷尽的,但这两个模式都不会匹配new R(null)
的结果。null
值和嵌套记录模式。给定一个记录类S
,具有一个类型为T
的单个组件,其中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
表达式的运行时评估
- 自 JDK 版本:
- 21
- 另请参见:
-
Constructor Summary
ConstructorsConstructorDescriptionMatchException
(String message, Throwable cause) 使用指定的详细消息和原因构造一个MatchException
。 -
Method Summary
Methods declared in class java.lang.Throwable
addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
-
Constructor Details
-
MatchException
使用指定的详细消息和原因构造一个MatchException
。- 参数:
-
message
- 详细消息(将保存以供以后通过Throwable.getMessage()
方法检索)。 -
cause
- 原因(将保存以供以后通过Throwable.getCause()
方法检索)。(允许使用null
值,表示原因不存在或未知。)
-