Scala 定义从Int的隐式转换

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

我试图定义从scala ints到自定义数据类型的隐式转换

这里是我的功能

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
?谢谢!我只是返回了错误的类型(超类的类型)