我正在尝试实现一个特性,它会覆盖一个Actor来截取某个消息类型,如下所示:
trait MyTrait[M] extends Actor {
abstract override def receive = {
case msg: M =>
// Do Something
super.receive(msg)
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我编译器警告:
abstract type pattern M is unchecked since it is eliminated by erasure
Run Code Online (Sandbox Code Playgroud)
我不能传递隐式类清单,因为它是一个特征,而不是一个类.在使用特性的同时,有没有办法实现上述目标?
您可以为特征添加抽象定义并在以后实现它:
scala> trait T[A] {
implicit def ev: Manifest[A]
def r: Any => Int = { case a: A => 1 case _ => 0}
}
defined trait T
scala> class X(implicit val ev: Manifest[String]) extends T[String]
defined class X
scala> new X().r("")
res0: Int = 1
scala> new X().r(5)
res1: Int = 0
Run Code Online (Sandbox Code Playgroud)