Типизированный Akka и имеющий базовый класс для MessageAdapters - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь что-то с Akka Typed и Scala, на самом деле что-то очень простое как концепция, но я не могу заставить это работать, так что, может быть, вы мне поможете.

У всех моих актеров будет один общий сигнал , поэтому я пытаюсь поместить его в базовый класс и разрешить всем моим актерам делиться им, но компилятор отказывает в этом в MessageAdapter ....

Так что мой код выглядит следующим образом ...

object ContractActor {
  sealed trait ContractEvent extends BaseEvent
  final case class onApprove(payload: Payload) extends ContractEvent
}

class ContractActor(ctx: ActorContext[ContractEvent]) extends BaseActor {
  val listingAdapter = : ActorRef[Receptionist.Listing] = ctx.
    messageAdapter(
      listing => onAddRelatedEvent(listing)
}

и базовый субъект

object BaseActor {
  trait BaseEvent;
  final case class onAddRelatedEvent(listing: Receptionist.Listing) extends BaseEvent
}

Компилятор жалуется на то, что onAddRelatedEvent не известно о ContractEvent, что удивляет меня, потому что ContractEvent расширяет BaseEvent ....

Чего мне здесь не хватает ....

1 Ответ

1 голос
/ 22 февраля 2020

Class ContractActor extension BaseActor не приводит к автоматическому переносу объекта-компаньона BaseActor в область видимости. Чтобы ввести его в область, просто импортируйте его в класс ContractActor:

import BaseActor._

В качестве альтернативы, вы можете переместить внутренний класс trait / case в класс-компаньон BaseActor.

...