マップの定義の一部として渡されるジェネリック型を使用する関数を使用しようとしています。クラスを拡張する汎用型の関数
EventBaseから延長としてsetMappingに私はTを定義し、setMapping呼出し - 私の定義クラスタイプI以来ので、ここに私のコード
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から伸びる専用のイベントクラスであります、使用して機能
user.loadUserName(evt.userName))
に私はEVTはそれがCreatedUserイベントとして考慮されることを期待していたが、それでもコンパイラはEventBaseとして検討しています。
Javaの同様のコードベースが動作しますが、私はここで何が欠けているのか分かりません。ここで
UserCreatedクラス
class UserCreated @JsonCreator() (@JsonProperty("userName")val userName: String) extends EventBase{
@JsonProperty("userName") def getUserName: String = {
userName
}
}
これは、問題はsetMapping
の定義では、あなたはT
がEventBase
のサブタイプであることだけをコンパイラを言っているということであるスタックトレース
[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