可能重复:
scala类中的val和对象?
是否存在实质性差异:
class Foo {
object timestamp extends java.util.Date
}
Run Code Online (Sandbox Code Playgroud)
和
class Foo {
val timestamp = new java.util.Date {}
}
Run Code Online (Sandbox Code Playgroud)
拥有一个具有对象字段的类真正意味着什么?它们用于什么?是否有必须使用对象的情况?
谢谢...
object如果您需要向字段添加行为,则使用a 可能更为可取.例如:
class Foo {
object startDate extends java.util.Date {
def isBusinessDay: Boolean = // ...
}
}
class Bar {
lazy val startDate = new java.util.Date {
def isBusinessDay: Boolean = // ...
}
}
Run Code Online (Sandbox Code Playgroud)
foo.startDateis 的类型foo.startDate.type,以及对foo.startDate.isBusinessDay方法的调用将被静态解析.
的类型的bar.startDate,在另一方面,是结构类型java.util.Date{ def isBusinessDay: Boolean }.bar.startDate.isBusinessDay因此,调用将使用反射并产生不必要的运行时开销.
两个不同,一个重要,一个微妙.首先,对象是懒洋洋地启动的.为了您的目的,这意味着您的第二个例子应该是
class Foo {
lazy val timestamp = new java.util.Date {}
}
Run Code Online (Sandbox Code Playgroud)
让他们表现得相当.更巧妙的是,每个对象都有自己独特的类型.在您的示例中,timestamp将具有类型Foo.timestamp.type.这通常在实践中并不重要,但如果您反复访问对象,可能会导致意外.
| 归档时间: |
|
| 查看次数: |
449 次 |
| 最近记录: |