Это не имеет неявного внешнего уровня, но мне нравится этот общий подход, и я реализовал его для пары типов коллекций (Список, Карта).
import java.util.{List => JList}
import scala.collection.JavaConverters._
def scalaList2JavaList[A, B](scalaList: List[A])
(implicit a2bConversion: A => B): JList[B] =
(scalaList map a2bConversion).asJava
Поскольку неявное преобразование из Int в Integer является частью стандартной библиотеки lib, использование в этом случае будет выглядеть так:
scalaList2JavaList[Int, Integer](someScalaList)
В другом направлении!
(так как они все равно доступны, так как они были моими оригинальными реализациями ...)
import java.util.{List => JList}
import scala.collection.JavaConversions._
def javaList2ScalaList[A, B](javaList: JList[A])
(implicit a2bConversion: A => B): List[B] =
javaList.toList map a2bConversion
Использование:
javaList2ScalaList[Integer, Int](someJavaList)
Затем его можно использовать повторно для всех списков, если в области видимости находится неявное преобразование содержимого типа.
(И если вам интересно, вот моя реализация для карты ...)
def javaMap2ScalaMap[A, B, C, D](javaMap: util.Map[A, B])(implicit a2cConversion: A => C, b2dConversion: B => D): Map[C, D] =
javaMap.toMap map { case (a, b) => (a2cConversion(a), b2dConversion(b)) }