Dlaczego `val` wewnątrz` obiektu` nie jest automatycznie ostateczny?

Jaki jest powódvalczy nie jest (?) automatycznie finalny w obiektach singleton? Na przykład.

object NonFinal {
   val a = 0
   val b = 1

   def test(i: Int) = (i: @annotation.switch) match {
      case `a` => true
      case `b` => false
   }
}

prowadzi do:

<console>:12: error: could not emit switch for @switch annotated match
          def test(i: Int) = (i: @annotation.switch) match {
                                                     ^

Natomiast

object Final {
   final val a = 0
   final val b = 1

   def test(i: Int) = (i: @annotation.switch) match {
      case `a` => true
      case `b` => false
   }
}

Kompiluje bez ostrzeżeń, więc prawdopodobnie generuje szybszą tabelę dopasowywania wzorców.

Konieczne dodaniefinal wydaje mi się, że to czysty irytujący hałas. Nie jestobject ostateczny per se, a więc także jego członkowie?

questionAnswers(3)

yourAnswerToTheQuestion