В Scala разница между окончательным значением val и val
В Scala, в чем разница между
val a = 1
и
final val fa = 1
Ответ 1
Члены
final не могут быть переопределены, скажем, в подклассе или признаке.
Допустимо:
class A {
val a = 1
}
class B extends A {
override val a = 2
}
Illegal:
class A {
final val a = 1
}
class B extends A {
override val a = 2
}
Вы получите сообщение об ошибке:
: 9: ошибка: переопределяющее значение a в классе A типа Int (1);
Значение a не может переопределить конечный элемент
Ответ 2
В Scala, final объявляет, что элемент не может быть переопределен в подклассах. Например:
class Parent {
val a = 1
final val b = 2
}
class Subclass extends Parent {
override val a = 3 // this line will compile
override val b = 4 // this line will not compile
}
Также, как обсуждалось в Почему` private val` и `private final val` отличаются?, если поле final val содержит "постоянное значение", постоянный примитивный тип, доступ к нему будет заменен байт-кодом для непосредственного загрузки этого значения.
Ответ 3
Вы также не можете использовать аннотации < finalval в (Java).