将对象声明为"最终"有什么意义?

fre*_*low 39 inheritance scala final object

我只是注意到可以final在Scala中声明对象:

final object O
Run Code Online (Sandbox Code Playgroud)

这样做有什么意义?无论如何,无法继承对象:

object A
object B extends A // not found: type A
Run Code Online (Sandbox Code Playgroud)

som*_*ytt 34

不是有人这样做,但是:

$ 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 }
                                                                        ^
Run Code Online (Sandbox Code Playgroud)

有时人们可能想要这样做.(例如.)

  • `-Yoverride-objects`从未运行良好,已完全从Scala 2.13中删除. (3认同)
  • @SethTisue 基本上你是为了破坏我们的乐趣而获得报酬的!如果只有这个网站有“自以为是的 Scala”与“一切都适用于 Scala”的标签就好了。 (2认同)

rig*_*old 27

没什么区别; 对象定义总是最终的.该语言规范明确提到这5.4修改器:

final 对象定义是多余的.