2011-08-04 56 views
7

在下面的任何方式選擇使用asJavaIterable?我知道我可以拼出特定的函數名稱,但我想知道如果我可以只聲明指定我想要的類型。我也很好奇,爲什麼JavaJavaIterable不會優先於JavaJavaCollection。解決Scala中模糊的隱式轉換問題

scala> import scala.collection.JavaConversions._ 
import scala.collection.JavaConversions._ 

scala> Iterable(0,1):java.lang.Iterable[Int] 
<console>:11: error: type mismatch; 
found : Iterable[Int] 
required: java.lang.Iterable[Int] 
Note that implicit conversions are not applicable because they are ambiguous: 
both method asJavaIterable in object JavaConversions of type [A](i: Iterable[A])java.lang.Iterable[A] 
and method asJavaCollection in object JavaConversions of type [A](i: Iterable[A])java.util.Collection[A] 
are possible conversion functions from Iterable[Int] to java.lang.Iterable[Int] 
     Iterable(0,1):java.lang.Iterable[Int] 
      ^

回答

12

這有可能限制進口的範圍,使asJavaCollection將不予考慮:

import scala.collection.JavaConversions.{asJavaCollection=>_,_} 

這上面說,「進口JavaConversions的所有成員,除了asJavaCollection」。

但是,我認爲它最好導入JavaConverters並明確您的轉換。

import scala.collection.JavaConverters._ 

Iterable(0,1).asJava