我的Scala代码中有Java Calendar对象,因为我使用了需要Calendar的Java代码。也许这本身就是一个问题。但如果不是,在调试器中我希望toString
给我一些可以理解的东西(例如,2015-02-25T22:00:00Z
而不是默认出现的对象格式乱码。我试过{{1}但是当我尝试制作一个class Cal extends GregorianCalendar
构造函数时,我遇到了问题。我该怎么办?或者我应该只使用Joda-Time?
答案 0 :(得分:1)
您可能希望使用具有更好/更安全功能的其他API,但您可以在给定的Calendar实例上混合使用特征来覆盖某些行为:
trait SpecialPrint { self: Calendar =>
override def toString(): String = self.toInstant().toString + ", " + self.getTimeZone.getDisplayName
}
val c = new GregorianCalendar(TimeZone.getDefault) with SpecialPrint
def operation(c: Calendar) {
println(c)
}
operation(c) // prints 2015-02-25T22:46:42.097Z, Eastern Standard Time
我使用的日历已经有一个TimeZone
构造函数,所以我认为这对你有用。
上面我使用了一个类型化的自引用(self: Calendar =>
)来对toString
调用中使用的正确类型进行自我引用。
如果您尝试在不扩展Calendar
的类上使用此mixin,它将失败,即此代码不会编译:
class Other()
val s = new Other() with SpecialPrint // illegal inheritance