假设我有一个名为 LongArrayWritable 的类型,它是 Long 数组的盒装表示。我有在这些类型之间转换的隐式定义:
implicit def boxLongArray(array: Array[Long]) : LongArrayWritable { /*elided*/}
implicit def unboxLongArray(array: LongArrayWritable) : Array[Long] { /*elided*/}
现在,我也有隐式在 java.lang.Iterable 和 scala.collection.List[X] 之间转换的通用形式:
implicit def iterator2list[X](it : java.lang.Iterable[X]) : List[X] { /* elided */ }
implicit def list2iterator[X](list : List[X]) : java.lang.Iterable[X] { /* elided */ }
有了这些定义,scala 编译器可以推断出 java.lang.Iterable[LongArrayWritable] 和 List[Array[Long]] 之间的隐式转换(相当于iterator2list(iterator).map(unboxLongArray(_))
),或者这超出了implicits 的能力,因此需要它自己的(显式?)隐式定义?
谢谢,
蒂姆