2013-07-03 7 views
7

私は、アンドロイドコールから返されるリストがJavaリストであるため、asInstanceOfを使用しても成功せずに、スラールリストにJavaリストを変換しようとしました。ScalaのforeachでJava Listを使用するにはどうすればよいですか?

val apList = (wfm.getScanResults:java.util.List[ScanResult]) 

は、私にエラーを与えて、この構築物にJavaのリストを使って好きなようには見えないように私には理解のために(新しいScalaの)リストを使用できるように、これを実行したいです。

value foreach is not a member of java.util.List[android.net.wifi.ScanResult] 
    for (ap<-apList) { .... } 
     ^

for/foreachで強制的にJavaリストを使用する方法はありますか?私が強要しなければならないのはどうですか?このように使用すると、asInstanceOfはr/tエラーを呼び出します。

+0

大きな質問です。なぜ私の理解のために働いていない(個々のエントリは、リストがジェネリックを使用しても、適切なタイプで抽出することができませんでした)と思っていた。 –

答えて

17

scala.collection.JavaConversionsscala.collection.JavaConvertersパッケージの下に一連のコンバージョンがあります。最初はコレクションに暗黙的に作用し、最後のコレクションは明示的に使用される予定です(Javaコレクションを取り出して.asScalaメソッドでスカラアナログに変換し、逆の場合は.asJavaでスカラアナログに変換します)。

import scala.collection.JavaConversions._ 

scala> val xs = new java.util.ArrayList[Int]() 
// xs: java.util.ArrayList[Int] = [] 
xs.add(1) 
xs.add(2) 
// java.util.ArrayList[Int] = [1, 2] 

scala> for(x <- xs) println(x) 
1 
2 

ところでscalaとJavaコレクションは完全に異なる階層とクラスのキャストを行うことができない持っているので、asInstanceOfが動作しない理由があります。 Scalaリストには、Javaクラスとの類似点がありません。これは、Objectクラスなので、java.util.RandomなどのListをキャストしようとするのと同じです。

関連する問題