首页 > 解决方案 > 错误:找到:需要 AnyVal:Int,如何在 Scala 中进行自动类型转换

问题描述

我收到以下错误消息:

[error]  found   : AnyVal
[error]  required: Int

但是Int扩展AnyVal [1]所以我相信JavaInteger可以从Object为什么它不起作用Scala,我错过了什么:

[1] final abstract class Int private extends AnyVal

我还尝试了一个简单的例子:

val a: AnyVal = 5

def aTob(a: Int): Int = a * 5

aTob(a)

错误:(5, 73) 类型不匹配;

发现:AnyVal

必需:整数

但以下作品:

val a: Any = 5

def aTob(a: Int): Int = a * 5

aTob(a.asInstanceOf[Int])

我不想显式转换它,但它应该是隐式转换。

[编辑:]我也试过Any

-

更新:

def getValue(dType: String): Any = {

    dType.toLowerCase() match {

        case "double[3]" =>
            10d
        case "float" =>
            1f

}

val d = getValue("double[3]")
val f = getValue("float")

SomeClass(d, f)


case class SomeClass(val d : Double, val f: Float)

标签: scala

解决方案


你可以使用隐式转换,但它很容易出错,因为如果你通过例如Floatval a: AnyVal = 5.0F会得到ClassCastException

implicit def anyValToInt(anyVal: AnyVal): Int = anyVal.asInstanceOf[Int]

val a: AnyVal = 5

def aTob(a: Int): Int = a * 5

aTob(a)

推荐阅读