9

我尝试使用 asInstanceOf 将 java 列表转换为 Scala 列表但没有成功,因为我从 android 调用返回的列表是一个 java 列表。

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

希望这样做,以便我可以在 for 理解中使用(新 Scala)列表,因为它似乎不喜欢在此构造中使用 java 列表给我一个错误。

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

他们是一种在 for/foreach 中使用 Java 列表而不强制它的方法吗?如果我必须强迫,怎么办?as asInstanceOf 以这种方式使用时会调用 ar/t 错误。

4

1 回答 1

27

scala.collection.JavaConversionsscala.collection.JavaConverters包下有一组转换。第一个隐含地作用于集合,最后一个打算显式使用(您将 java 集合转换为 scala 类的 with.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

顺便说一句, asInstanceOf 不起作用的原因是因为scala和 java 集合具有完全不同的层次结构并且无法进行类转换。Scala list 与 Java list 没有其他相似之处,除了一个共同的前身:Object 类,因此它与尝试将 List 强制转换为 java.util.Random 没有什么不同。

于 2013-07-03T23:29:33.590 回答