有没有办法获得特征的隐式清单

use*_*074 2 scala akka

我正在尝试实现一个特性,它会覆盖一个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)

我不能传递隐式类清单,因为它是一个特征,而不是一个类.在使用特性的同时,有没有办法实现上述目标?

kir*_*uku 5

您可以为特征添加抽象定义并在以后实现它:

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)