【问题标题】:define implicit conversion from Int从 Int 定义隐式转换
【发布时间】:2018-11-24 00:06:42
【问题描述】:

我正在尝试定义从 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

【问题讨论】:

  • DatabasePrimitive 是什么?
  • 谢谢!我只是返回了错误的类型(超类的类型)

标签: scala types type-conversion


【解决方案1】:

如果你正确声明返回类型,它编译就好了:

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

您的代码未编译,因为您的返回类型 fromContentDatabasePrimitive[Int] 而不是 DatabaseInt。因此,您要么必须调整fromContent 的返回类型,要么调整val xval z 的类型。要求一个特定的DatabaseInt,同时返回一个通用的DatabasePrimitive[Int] 是行不通的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 2017-04-11
    • 2011-05-01
    • 2013-01-01
    • 2020-01-04
    相关资源
    最近更新 更多