と のコードを見るJavaConversionsとJavaConverters、(2.10 で) Java と Scala のコレクション間で (いずれかの方向に) 変換する「正しい」方法がどれかわかりません。
@deprecated アノテーションがたくさんあるようです。
Scala チーム (Typesafe?) からの決定的な回答は公開されていますか?
ありがとう、ジョン
と のコードを見るJavaConversionsとJavaConverters、(2.10 で) Java と Scala のコレクション間で (いずれかの方向に) 変換する「正しい」方法がどれかわかりません。
@deprecated アノテーションがたくさんあるようです。
Scala チーム (Typesafe?) からの決定的な回答は公開されていますか?
ありがとう、ジョン
これは、次の危険性の代表的な例ですimport JavaConversions._。
scala> val m = Map(1 -> "one")
m: scala.collection.immutable.Map[Int,String] = Map(1 -> one)
scala> m.contains(1)
res0: Boolean = true
scala> m.contains("")
<console>:9: error: type mismatch;
 found   : String("")
 required: Int
              m.contains("")
                         ^
scala> import collection.JavaConversions._
import collection.JavaConversions._
scala> m.contains("")
res2: Boolean = false
型エラーを発行する代わりに、コンパイラは ScalaMapを に変換java.util.MapしますObject。
そのような宣言は知りませんが、常に を使用する必要があります。つまり、と でJavaConverters変換を示す必要があるものです。.asScala.asJava
私が理解しているようにJavaConverters、2.8.1 で導入されたのはJavaConversions、2.8 では危険であり、予期していなかったものを誤って変換しやすくなったためです。
この 2 つは異なる方法で動作します。
JavaConverters を使用すると、オブジェクトは asScala と asJava をサポートするクラスに変換され、コレクションをプログラムで変換できます。
JavaConversions を使用すると、必要に応じて Java/Scala コレクションが自動的に変換されます
後者のリスクは、間違った、または不要な変換が行われ、パフォーマンスに問題が生じることです。さらに、少なくとも Scala 2.9 では、暗黙的な変換のキャッシュはありません。つまり、メソッド内で同じ変換が 2 回適用されると、変換コードが 2 回呼び出されます。
コレクションを明示的に変換する場合、「Java」バージョンでそれが必要な場合は、同じメソッドで .asScala を 2 回呼び出すことを避けることができます。