В Scala a val
может переопределить def
, но a def
не может переопределить val
.
Итак, есть ли преимущество для объявления признака, например. например:
trait Resource {
val id: String
}
вместо этого?
trait Resource {
def id: String
}
Следующий вопрос: как компилятор рассматривает вызов val
и def
по-другому на практике и какие оптимизации он действительно делает с val
s? Компилятор настаивает на том, что val
стабильны - что на практике означает для компилятора? Предположим, что подкласс фактически реализует id
с помощью val
. Есть ли штраф за то, что он указан как def
в признаке?
Если мой код не требует стабильности члена id
, можно считать, что в этих случаях рекомендуется использовать def
в этом случае и переключиться на val
только тогда, когда узкое место производительности было идентифицировано здесь - как маловероятно это может быть?