2013-08-05 14 views
10

Ich habe ein sehr grundlegendes Problem mit scala.collection.JavaConversions. Ich würde erwarten, dass der folgende Code funktionieren würde, aber die implizite Konvertierung von java.util.List [String] zu scala List [String] nicht stattfindet. Warum?Implizite Konvertierung von java.util.List zu scala Liste tritt nicht auf

import collection.JavaConversions._ 
import java.util 
class Test { 
    def getStrings() : List[String] = { 
    val results : java.util.List[String] = new java.util.ArrayList[String]() 
    results 
    } 
} 

bekomme ich folgende Meldung von compi

type mismatch; 
found : java.util.List[String] 
required: scala.collection.immutable.List[String] 
    results 
    ^

Antwort

20

Konvertieren Sie es an:

def getStrings() : Seq[String] = { 
    val results : java.util.List[String] = new java.util.ArrayList[String]() 
    results 
    } 

Dies liegt daran, dass die implizite Funktion für die Umwandlung ist definiert als:

implicit def asScalaBuffer[A](l: java.util.List[A]): mutable.Buffer[A] 

Es gibt einezurückund nicht scala.collection.immutable.List. Daher der Fehler. So Alternative ist ein Seq statt List zu verwenden oder zu einem immutable.List konvertieren, wie unten:

def getStrings() : List[String] = { 
    val results = new java.util.ArrayList[String]()  
    results.toList 
} 
+0

Sie brauchen nicht ': java .util.List [String] 'im ersten Fall. –

+0

@AlexeyRomanov es wird nur für die Erklärung gezeigt, wo es umgewandelt wird. – Jatin

6

Alles, was Sie tun müssen, ist diese zu importieren:

import scala.collection.JavaConversions._ 
Verwandte Themen