지도 정의의 일부로 전달되는 제네릭 형식을 사용하는 함수를 사용하려고합니다. 여기클래스를 확장하는 일반 유형이있는 함수
내 코드
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]
}
}
사용자 생성 클래스 인 EN 이벤트 setMapping에서 나는 T를 정의하기 때문에 EventBase에서 확장 그래서, EventBase에서 확장 클래스 및 setMapping 호출 미안 정의 클래스 타입 I에서 나는 그것이 될 것이라고 EVT는 CreatedUser 이벤트로 생각 기다리고 있었다 기능
user.loadUserName(evt.userName))
에 사용하지만, 여전히 컴파일러는 EventBase으로 고려하고있다.
Java에서 비슷한 코드 기반이 작동하지만 여기에 무엇이 누락되어 있는지 모르겠습니다. 여기
이 스택 트레이스[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