错误:发现:AnyVal必需:整数,如何在Scala中进行自动类型转换

时间:2018-07-03 15:39:41

标签: scala

我收到以下错误消息:

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

但是Int扩展了AnyVal [1],因此我认为,像Java一样,Integer可以从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)

1 个答案:

答案 0 :(得分:1)

您可以使用隐式转换,但是容易出错,因为如果您通过例如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)