您的隐式转换不适用,因为您的隐式转换将转换
Option[Object]
到
Option[Int]
,但您的代码似乎希望它转换
Object
到
选项[ int ]
.
试包装
_items get( "Bar" )
具有
Some()
得到一个
选项[对象]
而不仅仅是一个
对象
看看你的内隐转换是否生效。
编辑:
实际上,我不确定为什么这对您不起作用,考虑到这一点(正如您在评论中正确指出的),scala映射返回选项。以下代码对我有效,并按我的预期打印“37”:
import scala.collection.mutable.Map
import scala.collection.mutable.HashMap
object ImplicitConversions {
implicit def asInt( _in:Option[Object] ) = _in.asInstanceOf[Option[Int]]
implicit def asDouble( _in:Option[Object] ) = _in.asInstanceOf[Option[Double]]
private def foo( _items:Map[String,Object] ) = {
val bar:Option[Int] = _items.get("Bar")
println(bar.get.intValue)
}
def main(args: Array[String]) {
val map:Map[String,Object] = new HashMap[String, Object]
map.put("Bar", Integer.valueOf(37))
foo(map)
}
}
但是,如果我使用Java映射,那么用
某物()
作品:
import java.util.Map
import java.util.HashMap
object ImplicitConversions {
implicit def asInt( _in:Option[Object] ) = _in.asInstanceOf[Option[Int]]
implicit def asDouble( _in:Option[Object] ) = _in.asInstanceOf[Option[Double]]
private def foo( _items:Map[String,Object] ) = {
val intermediate = Some(_items.get("Bar"))
val bar:Option[Int] = intermediate
println(bar.get.intValue)
}
def main(args: Array[String]) {
val map:Map[String,Object] = new HashMap[String, Object]
map.put("Bar", Integer.valueOf(37))
foo(map)
}
}
(注意,我必须存储
某物()
在一个中间变量中使转换工作-也许scala中的某个专家可以告诉我如何避免中间步骤。;(-))
斯卡拉和Java地图有可能在你的代码中混为一谈吗?您确实说过您正在调用遗留Java代码,这就是为什么您必须首先完成所有的隐式转换。如果在使用Scala映射时使用Java映射,那么这将解释这里的断开。