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的调用将使用反射并导致不必要的运行时开销。

09-30 22:15
查看更多