2013-08-05 13 views
10

Ho un problema di base con scala.collection.JavaConversions. Mi aspetto che il seguente codice funzioni, ma la conversione implicita da java.util.List [String] a scala List [String] non avviene. Perché?Conversione implicita di java.util.List su scala L'elenco non si verifica

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

vengo seguente messaggio dal compi

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

risposta

20

Convertire a:

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

Questo perché, la funzione implicita per la conversione è definito come:

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

Restituisce un mutable.Buffer e non scala.collection.immutable.List. Quindi l'errore. Così alternativa è quella di utilizzare un Seq invece di List o convertirlo in un immutable.List come di seguito:

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

Non è necessario ': java .util.List [String] 'nel primo caso. –

+0

@AlexeyRomanov viene mostrato solo per spiegazione dove viene convertito. – Jatin

6

Tutto quello che dovete fare è quello di importare questo:

import scala.collection.JavaConversions._ 
Problemi correlati