私は私が取得しています。この迷惑なエラーを修正する方法を見つけ出すために管理することはできませんが、シンプルなイベント処理システムであることを意図していますスカラ:バインドされていないワイルドカード型
import scala.collection.mutable
import scala.reflect.ClassTag
import scala.reflect._
object EventManager {
var handlers: Map[Class[_ <: Event], mutable.Set[EventHandler[_ <: Event]]] = Map()
def registerHandler [A <: Event](handler: EventHandler[A])(implicit tag: ClassTag[A]): Unit = {
val typeParam = tag.runtimeClass.asSubclass(classOf[Event])
handlers.get(tag.runtimeClass.asSubclass(classOf[Event])) match {
case Some(_) => handlers(typeParam) += handler.asInstanceOf[EventHandler[Event]]
case None => handlers += (typeParam -> mutable.Set(handler))
}
}
//Returns true if the event was cancelled, false otherwise
def fireEvent[A <: Event](event: A)(implicit tag: ClassTag[A]): Boolean = {
val typeParam = tag.runtimeClass.asSubclass(classOf[Event])
event match {
case cEvent: CancellableEvent =>
handlers.get(typeParam) match {
case Some(s) =>
s.foreach(handler => if (!cEvent.cancelled) handler.handle(event.asInstanceOf[_ <: Event]))
case None =>
}
//Return if the event was cancelled or not
cEvent.cancelled
case _ =>
handlers.get(typeParam) match {
case Some(s) => s.foreach(_.handle(event.asInstanceOf[_ <: Event]))
case None =>
}
false
}
}
}
trait Event
trait EventHandler[A <: Event]{
def handle(event: A)
}
trait CancellableEvent extends Event{
var cancelled: Boolean = false
}
次のコードを持っています。
Error:(31, 91) unbound wildcard type
s.foreach(handler => if (!cEvent.cancelled) handler.handle(event.asInstanceOf[_ <: Event]))
正直言って、これを修正するために私ができることはありません。また、私はあなたのコードをもっと慣れないようにするための提案があれば、長い間Scalaを使っていませんでした。