首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala -将整数列表映射到接收java.lang.Object的方法。

Scala -将整数列表映射到接收java.lang.Object的方法。
EN

Stack Overflow用户
提问于 2012-05-08 19:00:58
回答 1查看 1.2K关注 0票数 4

在Scala中工作,我有一个Java库,其中一个方法接收java.lang.Object。我想将Int值的列表映射到它。唯一可行的解决办法是:

代码语言:javascript
复制
val listOfInts = groupOfObjects.map(_.getNeededInt)

for(int <- listOfInts) libraryObject.libraryMethod(int)

而以下一项:

代码语言:javascript
复制
groupOfObjects.map(_.getNeededInt).map(libraryMethod(_)

甚至

代码语言:javascript
复制
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

就像

代码语言:javascript
复制
val result = listOfInts.map(libraryObject.libraryMethod(x => x.toInt))

代码语言:javascript
复制
val result = listOfInts.map(libraryObject.libraryMethod(_.toInt))

也不管用。

1)为什么会发生这种情况?据我所知,formap例程并没有太大的不同!

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)

  • missing参数类型用于扩展函数((x$3) => x$3.asInstanceOf{#null#}java.lang.Object{#null#}) {#null#}

)

我就像,天哪,它就这么长了!谁能解释这些<null>在这里的意义呢?我只想知道真相。(注意:我不得不用#替换<>的扣球,因为SO引擎切断了整个过程,所以要用你的想象力把它们替换回来)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-08 20:41:26

类型不匹配正好告诉您问题所在:您可以转换为java.lang.Integer,但不能转换为java.lang.Object。因此,告诉它,您想要一个Integer在途中的某处。例如:

代码语言:javascript
复制
groupOfObjects.map(_.getNeededInt: java.lang.Integer).map(libraryObject.libraryMethod(_))

(如果可能的话,表示法value: Type-在valvar或参数方法的声明之外使用时-意味着将value视为该类型;value要么需要是Type的子类,要么需要隐式转换,可以将value转换为适当的类型。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10504772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档