从
scala docs,我理解@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") }
版本2
val x = 5 (x) match { case 1 => println("1") case 2 => println("2") case _ => println("something else") }
是不是两个版本都会在编译时产生相同的字节代码指令?
解决方法
两个版本都会产生相同的字节码.您可以通过将一个版本粘贴到REPL中来执行此操作来测试:执行:javap – 对其进行反汇编,然后重复其他版本.