【发布时间】:2014-09-27 21:57:57
【问题描述】:
我刚刚注意到可以在 Scala 中将对象声明为 final:
final object O
这样做有什么意义?无论如何都不能从对象继承:
object A
object B extends A // not found: type A
【问题讨论】:
标签: scala object inheritance final
我刚刚注意到可以在 Scala 中将对象声明为 final:
final object O
这样做有什么意义?无论如何都不能从对象继承:
object A
object B extends A // not found: type A
【问题讨论】:
标签: scala object inheritance final
没有区别;对象定义始终是最终的。 language specification 在5.4 修饰符中明确提到了这一点:
final对于对象定义是多余的。
【讨论】:
final 标志(2.11 添加它,2.12 没有)
不是有人这样做,而是:
$ 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 }
^
可能有时人们想要这样做。 (For instance.)
【讨论】:
-Yoverride-objects 一直无法正常工作,已完全从 Scala 2.13 中删除。