scala - 从 Int 定义隐式转换
问题描述
我正在尝试定义从 scala 整数到自定义数据类型的隐式转换。
这是我的功能
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
. 因此,您要么必须调整 的返回类型,要么调整andfromContent
的类型。要求一个特定的,同时返回一个泛型是行不通的。val x
val z
DatabaseInt
DatabasePrimitive[Int]
推荐阅读
- wordpress - 如何禁用核心块的工具栏?这可能吗?
- jsf - Primefaces SelectOneMenu 的 ajax 事件在 outputPanel 内渲染,不工作
- javascript - 使用 webpack 包复制模块
- excel - 使用personal.xlsb 文件上的动态范围选择进行排序。遇到编译错误
- php - WooCommerce 按用户角色删除购物车
- python - 比较从 s3 读取的每个文件的数据帧
- excel - 如何在excel工作表中的所有列中获取值大于数字的行?
- python - 如何通过pandas实现'两个sql结果合并在一起'
- php - PHP:遍历数组给出错误的结果
- c# - 由于其保护级别而无法访问的类