【发布时间】:2015-09-25 22:30:13
【问题描述】:
我有一些代码(项目源代码在这里 - https://github.com/natemurthy/testing-final-vals):
object Main extends App {
final val NAME = "foo"
}
我正在使用 ScalaTest 和 SBT Coverage 插件来测试此代码,如下所示:
import org.scalatest.{FlatSpec,Matchers}
class MainTest extends FlatSpec with Matchers {
it should "have a name" in {
Main.NAME shouldBe "foo"
}
}
但由于某种原因,我只有在此表达式中包含 lazy 修饰符时才能获得覆盖点:
为什么会这样?
【问题讨论】:
-
vals 已经是最终版本,因此您不需要final修饰符。 -
@SteveChaloner:不,可以覆盖类的
val,所以val通常不是final。 -
@senia 我在考虑
objects(不能覆盖),但很好。 -
final val(没有显式返回类型)是 Scala 中的编译时常量,它在运行时不存在,因此无需覆盖。