2013-07-03 24 views
7

我试图将java列表转换为Scala列表,但没有成功使用asInstanceOf,因为我从android调用返回的列表是java列表。如何在Scala的foreach中使用Java List?

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

希望这样做,这样我可以使用(新斯卡拉)列表中的理解,因为它似乎不喜欢在这个结构给我一个错误使用Java列表。

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

他们的方式是在for/foreach中使用Java列表,而不强制使用它?如果我必须胁迫,怎么样? asInstance当以这种方式使用时调用r/t错误。

+0

伟大的问题。我想知道为什么我的理解不起作用(即使列表使用泛型,单个条目也无法用适当的类型提取)。 –

回答

17

有一组转换根据scala.collection.JavaConversionsscala.collection.JavaConverters包。第一个暗含集合行为,最后一个意图明确使用(您可以采用java集合并使用.asScala方法将其转换为scala模拟,反之亦然.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集合具有完全不同的层次和类型转换无法进行。除了一个普通的前辈:Object类之外,Scala列表与Java列表没有其他相似之处,因此它与尝试将List转换为java.util.Random没有区别。

相关问题