32
我只注意到它可能在斯卡拉申報對象爲final
:將對象聲明爲「final」有什麼意義?
final object O
什麼是這樣做的意義何在?無論如何都不能繼承對象:
object A
object B extends A // not found: type A
我只注意到它可能在斯卡拉申報對象爲final
:將對象聲明爲「final」有什麼意義?
final object O
什麼是這樣做的意義何在?無論如何都不能繼承對象:
object A
object B extends A // not found: type A
不是說有人這樣做,但:
$ 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.)
它沒有區別;對象定義總是最終的。該language specification明確提到這5.4修飾符:
final
是多餘的對象定義。
這是完全正確的。不過,我花了一段時間才說服自己。有關更詳細,痛苦的細節,請參閱[此重複問題]中的更新(http://stackoverflow.com/questions/30265070/whats-the-point-of-nonfinal-singleton-objects-in-scala)。另見[這個問題](http://stackoverflow.com/questions/17308141/what-are-the-subtle-differences-between-val-and-singleton-objects) – 2015-05-15 18:11:51