在 Scala-IDE 中工作,我有一个 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(_))
说
类型不匹配; found : Int required: java.lang.Object 注意:隐式存在于 scala.Int => java.lang.Integer,但从 Object 继承的方法被渲染为模棱两可。这是为了避免将任何 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.asInstanceOf[java.lang.Object])
- 扩展函数缺少参数类型 ((x$3) => x$3.asInstanceOf{#null#}[java.lang.Object]{#null#}) {#null#}
我想,天哪,它只是在增长!谁能解释所有这些<null>
东西在这里意味着什么?我只是想知道真相。(注意:我不得不用 # 替换 <> 刹车,因为 SO 引擎当时会切断整个东西,所以用你的想象力将它们替换回来)。