Я написал метод, который получает тип признака в качестве ввода. Это черта Localizable
:Scala trait как метод input - ошибка несоответствия типа
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)
Как я могу решить эту проблему? Благодарю.
Ваша проблема может заключаться в том, что вы запросили ожидаемый тип как 'RDD [(BigInt, At)]', в то время как фактический тип возврата - это 'RDD [(BigInt, Localizable)]', который является несоответствием типа, что бы вы не получили. Решение может заключаться в определении 'def localizeWithId [A <: Localizable] (rdd: RDD [A]): RDD [(BigInt, A)]' –
Спасибо! это прекрасно – Yoav
ok, позвольте мне опубликовать это как ответ, затем –