我正在尝试定义从scala int到自定义数据类型的隐式转换。
以下是我的功能
object DatabaseInt extends ImplicitConverter [Int]{
implicit def fromContent(content: Integer): DatabasePrimitive[Int] = DatabaseInt(content)
override implicit def fromContent(content: Int): DatabasePrimitive[Int] = DatabaseInt(content)
override implicit def toContent(el: DatabasePrimitive[Int]): Int = el.getContent
}
这似乎只适用于scala原始int。这是我的测试:
val x: DatabaseInt = 3 //does not work
val y: DatabaseInt = Int(3) //does work
val z: DatabaseInt = Integer.valueOf(3) //does not work
答案 0 :(得分:2)
如果你正确地声明了返回类型,它编译得很好:
import scala.language.implicitConversions
trait DatabasePrimitive[A] {
def getContent: A
}
case class DatabaseInt(i: Int) extends DatabasePrimitive[Int] {
def getContent = i
}
object DatabaseInt {
implicit def fromContent(content: Integer): DatabaseInt = DatabaseInt(content)
implicit def fromContent(content: Int): DatabaseInt = DatabaseInt(content)
implicit def toContent(el: DatabasePrimitive[Int]): Int = el.getContent
}
val x: DatabaseInt = 3 // works
val z: DatabaseInt = Integer.valueOf(3) // works
您的代码未编译,因为fromContent
的返回类型为DatabasePrimitive[Int]
而不是DatabaseInt
。因此,您必须调整fromContent
的返回类型,或val x
和val z
的类型。要求特定DatabaseInt
,同时返回通用DatabasePrimitive[Int]
不起作用。