2011-08-04 7 views
7

다음과 같이 asJavaIterable을 사용하도록 선택하는 방법은 무엇입니까? 나는 그 특정 함수 이름을 철자 할 수 있다는 것을 알지만, 내가 원하는 타입을 선언적으로 지정할 수 있는지 궁금해. 왜 asJavaIterable이 asJavaCollection보다 우선하지 않는지 궁금합니다. asJavaCollection이 고려되지 않도록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

는 수입의 범위를 제한하는 것이 가능하다 :

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

이 말한다, "asJavaCollection 제외 JavaConversions의 수입 모든 회원".

그러나 나는 JavaConverters을 가져 와서 전환을 명확하게 지정하는 것이 바람직하다고 생각합니다.

import scala.collection.JavaConverters._ 

Iterable(0,1).asJava