我收到以下错误消息:
[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)
答案 0 :(得分:1)
您可以使用隐式转换,但是容易出错,因为如果您通过例如Float
和val 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)