2013-08-05 53 views
10

我對scala.collection.JavaConversions有非常基本的問題。我期望下面的代碼可以工作,但是從java.util.List [String]到scala List [String]的隱式轉換不會發生。爲什麼?將java.util.List隱式轉換爲scala不會發生列表

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

我獲得以下的組合物1消息

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

回答

20

將其轉換爲:

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

這是因爲,對於轉換隱函數的定義爲:

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

它返回一個mutable.Buffer而不是scala.collection.immutable.List。因此錯誤。因此,另一種方法是使用的Seq代替List或將其轉換爲immutable.List如下:

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

你不需要':JAVA .util.List [String]'在第一種情況下。 –

+0

@AlexeyRomanov它只是顯示它的轉換的解釋。 – Jatin

6

所有你需要做的是導入此:

import scala.collection.JavaConversions._ 
相關問題