Scala转换很久以前

时间:2013-12-18 16:41:49

标签: scala slick

我正在使用nscala-time(Joda Time的包装器)和一个项目的光滑。我正在尝试使用此子句为数据库写一行:

Article.insert(0,"title1", "hellothere", DateTime.now.getMillis.asInstanceOf[Timestamp])

显然Slick不支持在Joda Time中定义的“dateTime”类型,我必须使用java.sql.Timestamp。所以我决定在insert方法中使用“asInstanceOf”进行一点转换。不幸的是,Scala很快告诉我Java.Long无法转换为Java.sql.Timestamp。然后我用了这个:

 val dateTime = new DateTime();
 val timeStamp = new Timestamp(dateTime.getMillis());

 Article.insert(0,"title1", "hellothere", timeStamp)

这神奇地起作用,而我所留下的只是混乱。

如何将其转换为一种方式而不是另一种方式?我应该使用与asInstanceOf不同的转换吗?

2 个答案:

答案 0 :(得分:6)

您误解了asInstanceOf的作用: asInstanceOf不会转换任何内容。它对编译器的作用是谎言,告诉它相信某些东西,而不是依赖它拥有的知识。

所以,你有一个Long,然后你得到一个Long,但假装它是一个Timestamp,这显然不起作用。

我对asInstanceOf提出了一个简单的建议:永远不要使用它。

答案 1 :(得分:2)

没有任何魔力。你的第一个陈述:

DateTime.now.getMillis

Long。长期不是Timestamp,因此您无法使用asInstanceOf将其转换为一个。

第二个陈述:

new Timestamp(dateTime.getMillis())

使用Timestamp构造函数根据dateTime.getMillis创建新的Timestamp实例。