4

Scala-IDE で作業している私は、メソッドの 1 つが を受け取る Java ライブラリを持っていますjava.lang.ObjectIntそして、値のリストをそれにマップしたいと思います。機能する唯一の解決策は次のとおりです。

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) なぜそれが起こっているのですか? 私の知る限り、formapルーチンはそれほど違いはありません!

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#}

そして私は、OMG、それはただ成長するだけです!<null>ここでこれらすべてが何を意味するのか、誰が説明できますか? 真実を知りたいだけです。(注: <> ブレーキを # に置き換える必要がありました。これは、SO エンジンがすべてを切り取ったためです。想像力を働かせて元に戻してください)。

4

1 に答える 1

3

型の不一致は、問題を正確に示しています。 に変換できますが、 に変換できjava.lang.Integerませjava.lang.ObjectIntegerですから、途中のどこかに尋ねたいと伝えてください。例えば:

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

(表記--またはまたは パラメータ メソッドvalue: Typeの宣言の外で使用される場合 --可能であれば、その型として表示することを意味します。のサブクラスである必要があるか、何かに変換できる暗黙の変換が必要です。適切なタイプの。)valvarvaluevalueTypevalue

于 2012-05-08T20:41:26.967 に答える