val или объект для неизменного, окончательного синглтон-объекта
Какое решение должно быть в целом предпочтительным, учитывая, что изменение совместимо с источником?
это
object Foo {
val Bar = new Baz(42, "The answer", true)
}
или это?
object Foo {
object Bar extends Baz(42, "The answer", true)
}
2 ответа
Функциональное различие между двумя конструкциями состоит в том, что object Bar
создается только тогда, когда это необходимо, а val Bar
создается как только object Foo
используется. На практике это означает, что вы должны использовать объект (или lazy val
) если правая часть дорогая и не всегда будет нужна. Иначе, val
наверное проще.
Также обратите внимание, что если в классе Baz
окончательно, вы не сможете использовать object
стиль, так как вы не можете расширить Baz
(хотя вы все еще можете использовать lazy val
если вы хотите отложить создание, пока оно не понадобится).
Я говорю первое, так как во втором вы создаете новый класс, но не добавляете никакой информации (без переопределения методов, значений или новых).