【发布时间】:2013-12-23 07:42:09
【问题描述】:
我有一个 trait 并实现了 akka actor,由于类型擦除,无法正确区分传入消息的类型,因此第一种情况是匹配所有消息。
我正在使用 scala 2.10.x,通过阅读许多其他答案,我知道可以使用 TypeTag 或 ClassTag 恢复特征内的类型信息,但我不知道如何应用它(如果可能的话)在 akka 中接收。
我的(非常简化的)示例如下。是否可以正确匹配泛型类型?
package com.ebay.box.canada.batch.jobs.siteMap
import akka.actor.Actor
import akka.actor.ActorSelection
import akka.actor.Actor.Receive
import scala.reflect.ClassTag
trait MessageProcessor[A,B] {
this: Actor =>
val destA: ActorSelection
val destB: ActorSelection
def processA(a: A): A
def processB(a: B): B
def receive: PartialFunction[Any,Unit] = {
case a: A =>
destA ! processA(a)
case b: B =>
destB ! processB(b)
}
}
class StringIntProcessor(val destA: ActorSelection, val destB: ActorSelection) extends MessageProcessor[String,Int] with Actor {
def processA(a: String) = { a + "1" }
def processB(b: Int) = { b + 1 }
}
【问题讨论】:
-
不应该
def process(a: B): B是def process(b: B): B? -
@ElliottFrisch,我已经编辑了示例代码。从技术上讲,差异对编译器或手头的问题无关紧要。不过,从风格上讲,这不是我的本意,而且命名应该是一致的。
标签: scala akka type-erasure