我有一個遊戲的形式,看起來像這樣:斯卡拉選項[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