2013-07-03 14 views
7

Bir android aramadan dönen listem java listesi olduğu için, bir java listesini bir Scala listesine asInstanceOf kullanarak başarılı bir şekilde dönüştürmeyi denedim. bana bir hata vererek bu yapı bir java listesini kullanarak gibi görünmüyor gibi anlama için bir (yeni Scala) listeyi kullanabilirsiniz böyleceScala's foreach ile bir Java Listesini nasıl kullanabilirim?

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

İstek bunu yapmak için.

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

Bir Java listesini, for for for for for for/foreach içinde kullanmadan bir yolu var mı? Ve eğer zorlamak zorundaysam nasıl olur? asInstanceOf, bu şekilde kullanıldığında bir r/t hatası çağırır.

+0

Harika bir soru. Anlayışımın neden çalışmadığı nedenini merak ediyordum (liste, jenerikler kullanılsa bile, tekil girişler uygun türden çıkarılamıyordu). –

cevap

17

scala.collection.JavaConversions ve scala.collection.JavaConverters paketleri altında bir dizi dönüşüm vardır. Birincisi, dolaylı olarak koleksiyona etki eder, sonuncusu açıkça kullanılmaya niyetlenir (java koleksiyonunu alır ve .asScala yöntemiyle scala analoguna çevirir ve .asJava ile tersi). scala ve java koleksiyonları tamamen farklı hiyerarşi ve sınıf dökme yapılamaz çünkü

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 

Ve bu arada

, asInstanceOf çalışmıyor nedenidir. Scala listesinin genel bir öncekinden başka Java listesiyle başka benzerlikleri yoktur: Object sınıfı, bu nedenle java.util.Random List'ini yayınlamaya çalışmaktan farklı değildir.