scala @switch 注释,它对生成的字节码有什么影响吗?

Kap*_*pil 7 annotations scala match

从 scala 文档中,我理解 @switch 注释是告诉编译器验证匹配表达式是否已编译为 tableswitch 或 lookupswitch 并在编译为一系列条件表达式时发出错误。

现在我的问题是,如果编译成功,那么与根本不使用@switch 注释相比,它对生成的字节码有什么影响吗?

考虑以下两个示例代码版本,

版本 1

  import scala.annotation.switch

  val x = 5

  (x: @switch) match {
    case 1 => println("1")
    case 2 => println("2")
    case _ => println("something else")
  }
Run Code Online (Sandbox Code Playgroud)

版本 2

  val x = 5

  (x) match {
    case 1 => println("1")
    case 2 => println("2")
    case _ => println("something else")
  }
Run Code Online (Sandbox Code Playgroud)

这不是两个版本都会在编译时产生相同的字节码指令吗?

win*_*ner 3

两个版本都会产生相同的字节码。您可以通过将一个版本粘贴到 REPL 中,:javap -对其进行反汇编,然后对另一个版本重复此操作来测试这一点。