Подтвердить что ты не робот

Какой смысл объявлять объект "окончательным"?

Я только заметил, что можно объявлять объекты как final в Scala:

final object O

Какой смысл делать это? В любом случае нельзя наследовать объекты:

object A
object B extends A // not found: type A
4b9b3361

Ответ 1

Не то, чтобы кто-то это делал, но:

$ scala -Yoverride-objects
Welcome to Scala version 2.11.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_11).
Type in expressions to have them evaluated.
Type :help for more information.

scala> trait A { object O } ; trait B extends A { override object O }
defined trait A
defined trait B

scala> trait A { final object O } ; trait B extends A { override object O }
<console>:8: error: overriding object O in trait A;
 object O cannot override final member
       trait A { final object O } ; trait B extends A { override object O }
                                                                        ^

Возможно, иногда люди хотят это делать. (Например.)

Ответ 2

Это не имеет значения; определения объектов всегда являются окончательными. Спецификация языка явно упоминает это в 5.4 модификаторах:

final является избыточным для определения объектов.