Class NotificationLite<T>

  • Type Parameters:
    T - the element type

    public final class NotificationLite<T>
    extends java.lang.Object
    For use in internal operators that need something like materialize and dematerialize wholly within the implementation of the operator but don't want to incur the allocation cost of actually creating Notification objects for every onNext and onCompleted.

    An object is allocated inside error(Throwable) to wrap the Throwable but this shouldn't affect performance because exceptions should be exceptionally rare.

    It's implemented as a singleton to maintain some semblance of type safety that is completely non-existent.

    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      private NotificationLite()  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      boolean accept​(Observer<? super T> o, java.lang.Object n)
      Unwraps the lite notification and calls the appropriate method on the Observer.
      java.lang.Object completed()
      Creates a lite onCompleted notification without doing any allocation.
      java.lang.Object error​(java.lang.Throwable e)
      Create a lite onError notification.
      java.lang.Throwable getError​(java.lang.Object n)
      Returns the Throwable corresponding to this OnError lite notification.
      T getValue​(java.lang.Object n)
      Returns the item corresponding to this OnNext lite notification.
      static <T> NotificationLite<T> instance()
      Gets the NotificationLite singleton.
      boolean isCompleted​(java.lang.Object n)
      Indicates whether or not the lite notification represents an onCompleted event.
      boolean isError​(java.lang.Object n)
      Indicates whether or not the lite notification represents an onError event.
      boolean isNext​(java.lang.Object n)
      Indicates whether or not the lite notification represents an onNext event.
      boolean isNull​(java.lang.Object n)
      Indicates whether or not the lite notification represents a wrapped null onNext event.
      Notification.Kind kind​(java.lang.Object n)
      Indicates which variety a particular lite notification is.
      java.lang.Object next​(T t)
      Creates a lite onNext notification for the value passed in without doing any allocation.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • ON_COMPLETED_SENTINEL

        private static final java.lang.Object ON_COMPLETED_SENTINEL
      • ON_NEXT_NULL_SENTINEL

        private static final java.lang.Object ON_NEXT_NULL_SENTINEL
    • Constructor Detail

      • NotificationLite

        private NotificationLite()
    • Method Detail

      • instance

        public static <T> NotificationLite<T> instance()
        Gets the NotificationLite singleton.
        Type Parameters:
        T - the value type
        Returns:
        the sole NotificationLite object
      • next

        public java.lang.Object next​(T t)
        Creates a lite onNext notification for the value passed in without doing any allocation. Can be unwrapped and sent with the accept(rx.Observer<? super T>, java.lang.Object) method.
        Parameters:
        t - the item emitted to onNext
        Returns:
        the item, or a null token representing the item if the item is null
      • error

        public java.lang.Object error​(java.lang.Throwable e)
        Create a lite onError notification. This call creates an object to wrap the Throwable, but since there should only be one of these, the performance impact should be small. Can be unwrapped and sent with the accept(rx.Observer<? super T>, java.lang.Object) method.
        Parameters:
        e - the Throwable in the onError notification
        Returns:
        an object encapsulating the exception
      • accept

        public boolean accept​(Observer<? super T> o,
                              java.lang.Object n)
        Unwraps the lite notification and calls the appropriate method on the Observer.
        Parameters:
        o - the Observer to call onNext, onCompleted, or onError.
        n - the lite notification
        Returns:
        true if n represents a termination event; false otherwise
        Throws:
        java.lang.IllegalArgumentException - if the notification is null.
        java.lang.NullPointerException - if the Observer is null.
      • isCompleted

        public boolean isCompleted​(java.lang.Object n)
        Indicates whether or not the lite notification represents an onCompleted event.
        Parameters:
        n - the lite notification
        Returns:
        true if n represents an onCompleted event; false otherwise
      • isError

        public boolean isError​(java.lang.Object n)
        Indicates whether or not the lite notification represents an onError event.
        Parameters:
        n - the lite notification
        Returns:
        true if n represents an onError event; false otherwise
      • isNull

        public boolean isNull​(java.lang.Object n)
        Indicates whether or not the lite notification represents a wrapped null onNext event.
        Parameters:
        n - the lite notification
        Returns:
        true if n represents a wrapped null onNext event, false otherwise
      • isNext

        public boolean isNext​(java.lang.Object n)
        Indicates whether or not the lite notification represents an onNext event.
        Parameters:
        n - the lite notification
        Returns:
        true if n represents an onNext event, false otherwise
      • kind

        public Notification.Kind kind​(java.lang.Object n)
        Indicates which variety a particular lite notification is. If you need something more complex than simply calling the right method on an Observer then you can use this method to get the Notification.Kind.
        Parameters:
        n - the lite notification
        Returns:
        the Notification.Kind of lite notification n is: either Kind.OnCompleted, Kind.OnError, or Kind.OnNext
        Throws:
        java.lang.IllegalArgumentException - if the notification is null.
      • getValue

        public T getValue​(java.lang.Object n)
        Returns the item corresponding to this OnNext lite notification. Bad things happen if you pass this an OnComplete or OnError notification type. For performance reasons, this method does not check for this, so you are expected to prevent such a mishap.
        Parameters:
        n - the lite notification (of type Kind.OnNext)
        Returns:
        the unwrapped value, which can be null
      • getError

        public java.lang.Throwable getError​(java.lang.Object n)
        Returns the Throwable corresponding to this OnError lite notification. Bad things happen if you pass this an OnComplete or OnNext notification type. For performance reasons, this method does not check for this, so you are expected to prevent such a mishap.
        Parameters:
        n - the lite notification (of type Kind.OnError)
        Returns:
        the Throwable wrapped inside n