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

时间:2012-05-08 19:00:59

标签: scala

在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 =&gt; 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)为什么会这样?据我所知,formap例程差别不大!

2)另外:You may wish to use a type ascription: x: java.lang.Integer是什么意思?我该怎么办?我尝试明确指定类型,如x: Int => x.toInt,但这太错误了。那么什么是&#34;类型归属&#34;?

更新

T.Grottker提出的解决方案补充说。我得到的错误是:

  
      
  • 缺少扩展函数的参数类型(($ 3)=&gt; x $ 3.asInstanceOf [java.lang.Object])
  •   
  • 缺少扩展函数的参数类型(($ 3)=&gt; x $ 3.asInstanceOf {#null#} [java.lang.Object] {#null#}){#null#}
  •   
和我一样,OMG,它只会增长!谁能解释所有这些<null>事物在这里意味着什么?我只是想知道真相。 (注意:我必须用#替换&lt;&gt; brakets,因为SO引擎会切断整个东西,所以用你的想象来取代它们。)

1 个答案:

答案 0 :(得分:3)

类型不匹配会告诉您确切的问题:您可以转换为java.lang.Integer转换为java.lang.Object。所以告诉它你要在途中的某个地方要Integer。例如:

groupOfObjects.map(_.getNeededInt: java.lang.Integer).map(libraryObject.libraryMethod(_))

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