Class Behavior<T>

  • Direct Known Subclasses:
    BehaviorImpl.DeferredBehavior, BehaviorImpl.FailedBehavior, BehaviorImpl.SameBehavior$, BehaviorImpl.UnhandledBehavior$, ExtensibleBehavior

    public abstract class Behavior<T>
    extends java.lang.Object
    The behavior of an actor defines how it reacts to the messages that it receives. The message may either be of the type that the Actor declares and which is part of the ActorRef signature, or it may be a system Signal that expresses a lifecycle event of either this actor or one of its child actors.

    Behaviors can be formulated in a number of different ways, either by using the DSLs in Behaviors and Behaviors or extending the abstract ExtensibleBehavior class.

    Closing over ActorContext makes a Behavior immobile: it cannot be moved to another context and executed there, and therefore it cannot be replicated or forked either.

    This base class is not meant to be extended by user code. If you do so, you may lose binary compatibility.

    Not for user extension.

    • Constructor Detail

      • Behavior

        public Behavior​(int _tag)
    • Method Detail

      • canonicalize

        public static <T> Behavior<T> canonicalize​(Behavior<T> behavior,
                                                   Behavior<T> current,
                                                   TypedActorContext<T> ctx)
        Given a possibly special behavior (same or unhandled) and a &ldquo;current&rdquo; behavior (which defines the meaning of encountering a same behavior) this method computes the next behavior, suitable for passing a message or signal.
      • start

        public static <T> Behavior<T> start​(Behavior<T> behavior,
                                            TypedActorContext<T> ctx)
        Starts deferred behavior and nested deferred behaviors until all deferred behaviors in the stack are started and then the resulting behavior is returned.
      • existsInStack

        public static <T> boolean existsInStack​(Behavior<T> behavior,
                                                scala.Function1<Behavior<T>,​java.lang.Object> p)
        Go through the behavior stack and apply a predicate to see if any nested behavior satisfies it. The stack must not contain any unstarted deferred behavior or an IllegalArgumentException will be thrown.
      • validateAsInitial

        public static <T> Behavior<T> validateAsInitial​(Behavior<T> behavior)
        Validate the given behavior as a suitable initial actor behavior; most notably the behavior can neither be same nor unhandled. Starting out with a Stopped behavior is allowed, though.
      • isAlive

        public static <T> boolean isAlive​(Behavior<T> behavior)
        Returns true if the given behavior is not stopped.
      • isUnhandled

        public static <T> boolean isUnhandled​(Behavior<T> behavior)
        Returns true if the given behavior is the special unhandled marker.
      • isDeferred

        public static <T> boolean isDeferred​(Behavior<T> behavior)
        Returns true if the given behavior is deferred.
      • interpretMessage

        public static <T> Behavior<T> interpretMessage​(Behavior<T> behavior,
                                                       TypedActorContext<T> ctx,
                                                       T msg)
        Execute the behavior with the given message.
      • narrow

        public final <U extends TBehavior<U> narrow()
        Narrow the type of this Behavior, which is always a safe operation. This method is necessary to implement the contravariant nature of Behavior (which cannot be expressed directly due to type inference problems).