Module java.base
Package java.lang

Class MatchException

所有已实现的接口:
Serializable

public final class MatchException extends RuntimeException
用于指示模式匹配中的意外失败的异常。

MatchException 在运行时遇到一个值,该值不匹配任何指定模式时可能会被抛出,即使该构造已被视为是穷尽的。这是有意的,并且可能出现在以下几种情况下:

  • 分开编译的异常,模式引用的类型层次结构的部分已更改,但模式匹配构造未重新编译。例如,如果一个密封接口在运行时具有与编译时不同的允许的子类型集,或者如果一个枚举类在运行时具有与编译时不同的枚举常量集,或者如果类型层次结构在编译时和运行时之间以某种不兼容的方式发生了更改。
  • null 值和涉及密封类的嵌套模式。例如,如果一个接口 Isealed,具有两个允许的子类 AB,并且一个记录类 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。原始异常将被设置为 MatchExceptioncause。不会记录任何 suppressed 异常。

参见 Java 语言规范:
14.11.3 switch 语句的执行
14.30.2 模式匹配
15.28.2 switch 表达式的运行时评估
自 JDK 版本:
21
另请参见:
  • Constructor Details

    • MatchException

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