@NonNull
    @Override
    public ListenerToken addChangeListener(Executor executor, @NonNull QueryChangeListener listener) {
        if (listener == null) { throw new IllegalArgumentException("listener cannot be null."); }
        return liveQuery().addChangeListener(executor, listener);
    }
@ NonNull @ Override public ListenerToken addChangeListener ( Executor executor , @ NonNull QueryChangeListener listener ) { if ( listener == null ) { throw new IllegalArgumentException ( "listener cannot be null." ) ; } return liveQuery ( ) . addChangeListener ( executor , listener ) ; }
Adds a query change listener with the dispatch queue on which changes
will be posted. If the dispatch queue is not specified, the changes will be
posted on the main queue.

@param executor The executor object that calls listener. If null, use default executor.
@param listener The listener to post changes.
@return An opaque listener token object for removing the listener.