2

这是涉及akka的部分代码:

abstract class AkkaBaseClass[T <: AkkaClass1, U <: Loger] extends Actor {

  protected val val1 = context.actorOf(Props[T])
  protected val val2 = context.actorOf(Props[U])

  def receive = {
    case "test" => {
      implicit val timeout = Timeout(Config.timeout seconds)
      val future = val1 ? "request"
      val result = Await.result(future, timeout.duration).asInstanceOf[List[ActorRef]]
      sender ! result
    }


    case "log" => val2 ! "log"
  }

class AkkaClass1 extends Actor { .... }


trait Loger extends Actor { ..... }

有2个错误:

No ClassTag available for T and No ClassTag available for U

但是TandU不是数组。我该怎么办?

4

2 回答 2

8

尽管您省略了发生错误的地方,但我猜它们发生在Props. 可能是Props采用隐式ClassTag作为参数的情况,特别是因为它不采用任何其他参数。虽然 aClassTag用于数组创建,但它也可以用于其他事情,例如获取 aClass然后可以用于通过反射实例化类,或者在比较接收到的实例时作为参考。

要解决它,请AkkaBaseClass像这样声明:

import scala.reflect.ClassTag

abstract class AkkaBaseClass[T <: AkkaClass1 : ClassTag, U <: Loger : ClassTag] extends Actor {
于 2013-09-09T06:08:57.597 回答
3

如果不需要,请不要阻止期货:

这是您的问题的解决方案。

abstract class AkkaBaseClass[T <: AkkaClass1 : ClassTag, U <: Loger : ClassTag] extends Actor {

  protected val val1 = context.actorOf(Props[T])
  protected val val2 = context.actorOf(Props[U])

  def receive = {
    case "test" => val1 forward "request"
    case  "log" => val2 ! "log"
  }

class AkkaClass1 extends Actor { .... }


trait Loger extends Actor { ..... }
于 2013-09-09T09:58:42.307 回答