我写了一个获取特征类型作为输入的方法 . 这是特质 Localizable
:
import com.vividsolutions.jts.geom.Coordinate
trait Localizable {
val location : Coordinate
}
这是方法:
def localizeWithId(rdd : RDD[Localizable]) : RDD[(BigInt,Localizable)] = {
return rdd.map { case place =>
(getIdFromLocation(place.location.x, place.location.y), place)
}
}
问题是,当我尝试调用此方法,并发送一个扩展此特征作为参数的案例类时,我收到类型不匹配的错误 .
这是案例类:
case class At (
eventDate : DateTime,
location : Coordinate
) extends Localizable
这就是电话:
val ats : RDD[At] = ...
val atsLocalized : RDD[(BigInt, At)] = localizeWithId(ats)
我该如何解决?谢谢 .
1 回答
你的问题在于:
你说你希望返回
RDD[(BigInt, At)]
,而实际的返回类型被声明为RDD [(BigInt,Localizable)] .RDD
是不变的,因此即使B
是A
的子类型,也不能将RDD[B]
放在RDD[A]
的位置 . 但无论如何,情况并非如此 .你可以像这样使你的方法通用:
要求
A
是你的特质的子类型 .