In Akka, is there a way to restrict messages to actors to be of a specific static type other than using the "Typed Actor" APIs that use an RPC style programming model?
Can I use the message passing style with Akka without throwing away static type safety at the actor boundaries?
For example, I'd like to use code like this:
sealed abstract class FooMessage
case object Foo extends FooMessage
case object Bar extends FooMessage
class FooActor extends Actor[FooMessage] {
def receive = {
case Foo => () // OK
// Would raise a compiler error:
// case s: String => error("Can't happen, String is not a subtype of FooMessage")
}
}
val fooActor = actorOf[FooActor]
fooActor ! Foo // OK
// Won't compile:
fooActor ! "Hello"
Perhaps one would have to extend some base trait or have a construct like Either
to allow for system level messages (Exit
, etc.).