Dlaczego `val` wewnątrz` obiektu` nie jest automatycznie ostateczny?
Jaki jest powódval
czy 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?