在Scala中工作,我有一个Java库,其中一个方法接收java.lang.Object。我想将Int值的列表映射到它。唯一可行的解决办法是:
val listOfInts = groupOfObjects.map(_.getNeededInt)
for(int <- listOfInts) libraryObject.libraryMethod(int)而以下一项:
groupOfObjects.map(_.getNeededInt).map(libraryMethod(_)甚至
val listOfInts = groupOfObjects.map(_.getNeededInt)
val result = listOfInts.map(libraryObject.libraryMethod(_))说
类型不匹配;发现: Int必需: java.lang.Object注释:从scala.Int => java.lang.Integer存在隐式,但从对象继承的方法呈现为模糊。这是为了避免将任何scala.Int转换为任何AnyRef的隐式覆盖。您可能希望使用类型归属:
x: java.lang.Integer。
就像
val result = listOfInts.map(libraryObject.libraryMethod(x => x.toInt))或
val result = listOfInts.map(libraryObject.libraryMethod(_.toInt))也不管用。
1)为什么会发生这种情况?据我所知,for和map例程并没有太大的不同!
2)还有:You may wish to use a type ascription: x: java.lang.Integer是什么意思?我该怎么做?我尝试显式地指定类型,比如x: Int => x.toInt,但这太错误了。那么什么是“类型归属”呢?
更新:
T.Grottker提出的解决方案增加了它的功能。我所犯的错误是:
扩展函数缺少的参数类型((x$3) x$3.asInstanceOfjava.lang.Object)
)
我就像,天哪,它就这么长了!谁能解释这些<null>在这里的意义呢?我只想知道真相。(注意:我不得不用#替换<>的扣球,因为SO引擎切断了整个过程,所以要用你的想象力把它们替换回来)。
发布于 2012-05-08 20:41:26
类型不匹配正好告诉您问题所在:您可以转换为java.lang.Integer,但不能转换为java.lang.Object。因此,告诉它,您想要一个Integer在途中的某处。例如:
groupOfObjects.map(_.getNeededInt: java.lang.Integer).map(libraryObject.libraryMethod(_))(如果可能的话,表示法value: Type-在val或var或参数方法的声明之外使用时-意味着将value视为该类型;value要么需要是Type的子类,要么需要隐式转换,可以将value转换为适当的类型。)
https://stackoverflow.com/questions/10504772
复制相似问题