2014-10-03 45 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

相关问题