Scala 定义从Int的隐式转换
我试图定义从scala ints到自定义数据类型的隐式转换 这里是我的功能Scala 定义从Int的隐式转换,scala,types,type-conversion,Scala,Types,Type Conversion,我试图定义从scala ints到自定义数据类型的隐式转换 这里是我的功能 object DatabaseInt extends ImplicitConverter [Int]{ implicit def fromContent(content: Integer): DatabasePrimitive[Int] = DatabaseInt(content) override implicit def fromContent(content: Int): DatabasePri
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基元整数。这是我的测试:
val x: DatabaseInt = 3 //does not work
val y: DatabaseInt = Int(3) //does work
val z: DatabaseInt = Integer.valueOf(3) //does not work
如果正确声明了返回类型,则它的编译效果很好:
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
的返回类型,或者调整valx
和valz
的类型。需要特定的DatabaseInt
,同时返回通用的DatabasePrimitive[Int]
不起作用。什么是DatabasePrimitive
?谢谢!我只是返回了错误的类型(超类的类型)