我正在寫一個DSL,我有一種情況,我想將某個值隱式轉換爲任何類型。我創建了一個包裝類與價值和主要工作的隱式方法:Scala:我可以訪問類型化方法的類型嗎?
case class ObjectOperationResult(val value: AnyRef)
object ObjectOperationResult {
implicit def result2T[ T ](result: ObjectOperationResult): T = {
result.value.asInstanceOf[ T ]
}
}
如果result.value不是有效的類型的代碼將拋出一個異常;這取決於用戶確保他們做的是正確的事情。但是,我想通過根據目標類型執行不同的邏輯來使其變得更加智能。例如,如果目標類型是String,則調用toString而不是asInstanceOf [];這樣的事情:
case class ObjectOperationResult(val value: AnyRef)
object ObjectOperationResult {
implicit def result2T[ T ](result: ObjectOperationResult): T = {
match T {
case String s: result.value.toString
case _ : result.value.asInstanceOf[ T ]
}
}
}
這不會編譯;有什麼方法可以確定T的類型,以便我可以採取相應的行動?
這就是目前我做什麼。問題是它無法處理所有的可能性。例如,用戶可能想要使用他們自己的類。如果可能的話,我想要一個可以處理任何課程的解決方案。 – DeegC
'val str = ObjectOperationResult(「foo」); val i = str'這將編譯爲隱式轉換ObjectOperationResult => Int由ObjectOperationResult.toInt提供,但由於執行了'anyRefValyeOfStr.asInstanceOf [Int]'強制轉換而失敗。編譯時不安全。 – cchantep