7

Scala で API を作成しました。List[SomeTrait] を入力として期待し、List[OtherTrait] を返すエントリ ポイントがいくつかあります。

使用する Java プロジェクトにその Jar を含めていますが、Scala の List オブジェクトを期待するメソッドに java.util.List を渡そうとすると問題が発生しました。私はそれらが同じではなく、Java が変換を行う方法を知らないことを認識しています。では、Java 呼び出し元が Scala List を渡すことを期待せずに、これを機能させるにはどうすればよいでしょうか?

4

1 に答える 1

7

他の提案を聞きたいのですが、これが私が見つけた解決策であり、Google のどこにも見つかりませんでした。

私の通常の Scala エントリポイントが次のようなメソッドである場合:

def doSomething(things: List[Thing]): List[Result] = { ... }

次のような別のメソッドを追加します。

//import scala.collection.JavaConversions._
import scala.collection.JavaConverters._

def doSomething(things: java.util.List[Thing]): java.util.List[Result] =
  doSomething(things.asScala.toList).asJava

元のメソッドへの呼び出しでの明示的な変換は、それ自体を呼び出す無限ループになってしまうためです。

これは、自分の質問を投稿して回答する最初の試みです...これを行うための標準的な方法を見逃していた場合はお詫びします。私は Scala に非常に慣れていないので、共有する価値があり、より良い方法について議論する価値があるように思えました。

EDIT @Luigi Plingeからの提案を反映するようにコードを更新しました

于 2012-09-10T22:46:26.677 に答える