我有一个游戏的形式,看起来像这样:斯卡拉选项[java.util.Date]不能被转换为选项[java.sql.Date]
val form = Form(tuple(
/* 5 more fields */
"dueDate" -> optional(date)
) )
我试图插入"dueDate"
成Slick中的对象。
newAuditForm.bindFromRequest.fold(
errors => BadRequest(views.html.error(form)),
success => {
Database.forDataSource(DB.getDataSource()) withSession {
Things.forInsert.insert Thing(
(success._6).asInstanceOf[Option[java.sql.Date]]
)
}
}
)
油滑的地方只有java.sql.Date
交易,并与java.util.Date
只玩交易(?)在Form
对象。
使用asInstanceOf
回报:
ClassCastException: java.util.Date cannot be cast to java.sql.Date
还有的必须是一个办法,我写了规则这个转换成为可能...... 我需要写一个new pattern matching rule?
我不认为这是值得引入隐式转换,如果你已经做类型归属显式映射。 –
感谢您的快速回复。我很感激你如何去解释发生了什么。 我的理解是显式转换更多是一次性的事情,而隐式转换相当于编写新的类型转换规则吗? – Meredith
@MeredithLeu欢迎。隐式转换是用于转换的特殊函数,而不是类型转换:如果您有一个值'x:A',并且您需要一个'B'并且您有一个隐式函数'f:A => B',编译器将会用'f(x)'替换'x'。所以在字节码级别上,它们只不过是函数调用。显式转换正在编写完全相同的函数调用。请参阅:http:// stackoverflow。com/questions/2861501/can-someone-explain-me-implicit-conversions-in-scala – gzm0