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

ただしT、 andUは配列ではありません。私はそれについて何をしますか?

4

2 に答える 2

8

エラーが発生した場所は省略されていますが、 で発生していると思いPropsます。特に他のパラメーターを取らないため、パラメーターとしてProps暗黙的に取るのはおそらくケースです。ClassTagaClassTagは配列の作成で使用Classされますが、リフレクションによってクラスをインスタンス化するために使用できる a を取得したり、受け取ったインスタンスを比較するときの参照として使用したりするなど、他の目的にも使用できます。

それを解決するには、次のように宣言し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 に答える