scala - 错误:找到:需要 AnyVal:Int,如何在 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)
解决方案
你可以使用隐式转换,但它很容易出错,因为如果你通过例如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)
推荐阅读
- python - tensorflow 2.3.1 ImportError: DLL load failed: 找不到指定的模块
- jquery - Jquery 绑定将此返回到整个文档
- twitter-bootstrap - Bootstrap 5 中的响应式排版?
- javascript - 如何获取数组发布值
- python - Pandas TypeError:只能将str(不是“int”)连接到str
- java - 我正在尝试在 javafx 上的游戏上添加开始屏幕
- excel - 如何将重复的行转为列?
- javascript - 将元素高度设置为 clientHeight 导致页面滚动
- python - 使用 os.system(
) 期望用户在 pyhton 中输入 - php - Guzzle 不接受表单参数中的数组