Sur Akka Pour les acteurs, existe-t-il un moyen de restreindre les messages à un type statique spécifique, autrement qu'en utilisant les API "Acteurs typés" qui utilisent un modèle de programmation de type RPC ?
Puis-je utiliser le style de passage des messages avec Akka sans renoncer à la sécurité statique des types aux frontières des acteurs ?
Par exemple, j'aimerais utiliser un code comme celui-ci :
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"
Il faudrait peut-être étendre un trait de base ou avoir une construction du type Either
pour permettre les messages de niveau système ( Exit
etc.).