如何将构造时代码混合到Scala中具有特征的类中?

时间:2011-11-07 00:13:46

标签: scala traits

我希望扩展特征的所有类都存储他们的创建时间(作为org.joda.time.DateTime实例)。该特征将def dt : DateTime定义为吸气剂。我是否还可以定义代码以获取特征中的时间戳(打算在构建时运行)?

更新:我想我已经想到了如何在不处理构造函数的情况下实现特定任务(只需将dt定义为val并将其设置为新的DateTime,这可能会起作用) ,但标题中的问题仍然很有趣。

2 个答案:

答案 0 :(得分:1)

您无法通过特征添加构造函数。

答案 1 :(得分:0)

只需替换def currentTime的实现即可生成org.joda.time.DateTime实例,并将该特征混合到任何类中。

trait Timestamp {
  private def currentTime = {
    import java.util.Calendar._

    val calendar = getInstance

    def hours = calendar.get(HOUR_OF_DAY)
    def minutes = calendar.get(MINUTE)
    def seconds = calendar.get(SECOND)
    def milliseconds = calendar.get(MILLISECOND)

    hours + ":" + minutes + ":" + seconds + ":" + milliseconds
  }

  final val creationTime = currentTime
}