2013-08-05 35 views
10

Tôi có vấn đề rất cơ bản với scala.collection.JavaConversions. Tôi hy vọng rằng mã sau đây sẽ làm việc nhưng chuyển đổi ngầm từ java.util.List [String] thành scala List [String] không xảy ra. Tại sao?Chuyển đổi ngầm định của java.util.List thành scala Danh sách không xảy ra

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

tôi nhận được sau thông điệp từ compi

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

Trả lời

20

Chuyển đổi nó để:

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

này là vì, chức năng tiềm ẩn cho việc chuyển đổi được định nghĩa là:

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

Nó trả về một mutable.Buffer và không phải scala.collection.immutable.List. Do đó lỗi. Vì vậy, thay thế là sử dụng một Seq thay vì List hoặc chuyển nó sang một immutable.List như sau:

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

Bạn không cần ': java .util.List [String] 'trong trường hợp đầu tiên. –

+0

@AlexeyRomanov nó chỉ cho thấy giải thích nơi nó được chuyển đổi. – Jatin

6

Tất cả bạn cần làm là để nhập khẩu này:

import scala.collection.JavaConversions._ 
Các vấn đề liên quan