2011-08-04 20 views
7

¿Alguna manera de optar por usar como inestable en lo siguiente? Sé que puedo deletrear ese nombre de función en particular, pero me pregunto si puedo especificar de manera espectral el tipo que deseo. También me llama la atención por qué como JavaIterable no tiene prioridad sobre como JavaCollection.Resolviendo conversiones implícitas ambiguas en 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] 
      ^

Respuesta

12

Es posible limitar el alcance de la importación de manera que no se considerará asJavaCollection:

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

Este dice, "importación de todos los miembros, excepto JavaConversions asJavaCollection".

Sin embargo, creo que es preferible importar JavaConverters y hacer que sus conversiones sean explícitas.

import scala.collection.JavaConverters._ 

Iterable(0,1).asJava 
Cuestiones relacionadas