为什么Scala不能将此匹配优化为交换机?

Mau*_*res 5 optimization scala constants pattern-matching switch-statement

我有这种模式匹配只匹配字节值,但当我添加@switch它时说:

无法发出切换到@switch注释匹配

我在这里错过了什么?

仅供参考,我已经尝试过并且没有工作:

  • 将此常量移动到Java接口并使用public static final byte字段(我也尝试过将它们int替换为byte)
  • 将字段标记为final valScala Message协同对象
  • 将字段标记为@inline伴随对象

我肯定迷失在这里.

Mau*_*res 2

scala-user论坛提供的答案是使 vals 最终并删除注释Byte:

object Message {
  final val Authentication = 'R'
  final val BackendKeyData = 'K'
  final val Bind = 'B'
  final val BindComplete = '2'
}
Run Code Online (Sandbox Code Playgroud)

现在@switch正确生成了 a lookupswitch(它没有生成 a tableswitch,但已经足够好了)。