Possible Duplicate:
val and object inside a scala class?
之间是否存在实质性差异:
class Foo {
object timestamp extends java.util.Date
}
class Foo {
val timestamp = new java.util.Date {}
}
最佳答案
如果需要向字段添加行为,则最好使用object
。例如:
class Foo {
object startDate extends java.util.Date {
def isBusinessDay: Boolean = // ...
}
}
class Bar {
lazy val startDate = new java.util.Date {
def isBusinessDay: Boolean = // ...
}
}
foo.startDate
的类型是foo.startDate.type
,对foo.startDate.isBusinessDay
方法的调用将被静态解析。bar.startDate
的类型是结构类型java.util.Date{ def isBusinessDay: Boolean }
。因此,对bar.startDate.isBusinessDay
的调用将使用反射并导致不必要的运行时开销。