Я пытаюсь использовать функцию, которая использует общий тип, который передается как часть определения карты.Функция с общим типом, которые расширяют класс
Вот мой код
object EventMapping {
val eventMapping = collection.mutable.Map[Class[_ <: EventBase], (User, EventBase) => Unit]()
setMapping(classOf[UserCreated], (user, evt) => user.loadUserName(evt.userName))
private def setMapping[T <: EventBase](clazz: Class[T],fn: (User, T) => Unit) {
eventMapping += clazz -> fn.asInstanceOf[(User, EventBase) => Unit]
}
}
класс UserCreated класс ан событие, которое простирается от EventBase, так, так как в setMapping я определяю T продленного от EventBase, и в setMapping вызова I'm определяющем, какой тип класса I Я использую в функции
user.loadUserName(evt.userName))
Я ожидал, что ЭВТ было бы рассматривать как событие CreatedUser, но все-таки компилятор считать EventBase.
Аналогичная база кода на Java работает, но я не знаю, что мне здесь не хватает.
Здесь класс UserCreated
class UserCreated @JsonCreator() (@JsonProperty("userName")val userName: String) extends EventBase{
@JsonProperty("userName") def getUserName: String = {
userName
}
}
Это трассировку стека
[info] Compiling 5 Scala sources to /Development/proyectX/target/scala-2.11/classes...
[error] /Development/proyectX/app/persistance/EventMapping.scala:11: missing parameter type
[error] setMapping(classOf[UserCreated], (user, evt) => user.loadUserName(evt.asInstanceOf[UserCreated].userName))
[error] ^
[error] one error found
[error] (compile:compile) Compilation failed
Какая ошибка? Можете ли вы опубликовать сообщение об ошибке компилятора? – Yawar
Я добавляю трассировку стека – paul