2014-10-03 54 views
2

我想實現它覆蓋的演員如下攔截某消息類型的特點:有沒有辦法得到一個隱含的清單以一個特點

trait MyTrait[M] extends Actor { 

    abstract override def receive = { 

      case msg: M => 
       // Do Something 
       super.receive(msg) 
     } 
    } 

這使我的編譯器警告:

abstract type pattern M is unchecked since it is eliminated by erasure 

而我不能傳遞隱式類清單,因爲它是一個特質而不是類。有沒有什麼方法可以在使用特質的同時達到上述目的?

回答

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 
+0

如果想要實例它給匿名先前定義的類?所以在上面的例子中,我有類SomeActor擴展Actor。我想創建一個使用特性作爲mixin的對象:「val x = new SomeActor with MyTrait [String]」 – user79074 2014-10-04 13:55:58

+0

嗯,你可以用'MyTrait [String] {implicit val ev:Manifest [字符串] =清單[字符串]}' – sschaef 2014-10-04 14:36:11

相關問題