模块 java.base
 java.lang

类 MatchException

所有已实现的接口:
Serializable

public final class MatchException extends RuntimeException
MatchException 是 Java 平台的预览 API。
程序只能在启用预览功能时使用 MatchException
预览功能可能会在未来的版本中删除,或升级为 Java 平台的永久功能。
抛出以指示模式匹配中的意外失败。

当详尽的模式匹配语言构造(例如 switch 表达式)在运行时遇到与任何提供的模式不匹配的值时,可能会抛出 MatchException。这可能由多种情况引起:

  • 单独的编译异常,其中密封接口在运行时具有与编译时不同的允许子类型集,枚举在运行时具有与编译时不同的常量集,或者类型层次结构以不兼容的方式更改编译时和运行时之间。
  • null 使用密封类型的值和嵌套模式。如果接口或抽象类 C 被密封以允许 AB ,则记录模式集 R(A a)R(B b) 在记录 R 上是详尽的,其唯一组件是类型 C ,但这些模式都不匹配 new R(null)
  • 空目标和嵌套记录模式。给定一个记录类型 R,它的唯一组成部分是 S,而它又是一个唯一组成部分是 String 的记录,那么嵌套记录模式 R(S(String s)) 将不匹配 new R(null)

意外输入引起的匹配失败通常只会在尝试所有模式后抛出MatchException;即使 R(S(String s)) 不匹配 new R(null) ,后面的模式(例如 R r )仍可能与目标匹配。

当作为模式匹配的一部分执行的操作抛出意外异常时,也可能抛出 MatchException。例如,模式匹配可能会导致隐式调用记录组件访问器等方法以提取模式绑定。如果这些方法抛出异常,则模式匹配构造的执行可能会失败并返回 MatchException。原始异常将被设置为 MatchExceptioncause 。不会记录 suppressed 异常。

Java 语言规范:
14.11.3 switch语句的执行
14.30.2 模式匹配
15.28.2 开关表达式的运行时评估
自从:
19
参见:
  • 构造方法详细信息

    • MatchException

      public MatchException(String  message, Throwable  cause)
      使用指定的详细消息和原因构造一个 MatchException
      参数:
      message - 详细消息(保存以供以后通过 Throwable.getMessage() 方法检索)。
      cause - 原因(保存以供以后通过 Throwable.getCause() 方法检索)。 (允许使用 null 值,表示原因不存在或未知。)