• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.robolectric.util;
2 
3 import java.util.Objects;
4 
5 /**
6  * Represents an operation that accepts a single input argument and returns no
7  * result. Unlike most other functional interfaces, {@code Consumer} is expected
8  * to operate via side-effects.
9  *
10  * Included in Robolectric since Android doesn't support streams yet (as of O).
11  *
12  * @param <T> the type of the input to the operation
13  */
14 public interface Consumer<T> {
15 
16   /**
17    * Performs this operation on the given argument.
18    *
19    * @param t the input argument
20    */
accept(T t)21   void accept(T t);
22 
23   /**
24    * Returns a composed {@code Consumer} that performs, in sequence, this operation followed by the
25    * {@code after} operation. If performing either operation throws an exception, it is relayed to
26    * the caller of the composed operation.  If performing this operation throws an exception, the
27    * {@code after} operation will not be performed.
28    *
29    * @param after the operation to perform after this operation
30    * @return a composed {@code Consumer} that performs in sequence this operation followed by the
31    * {@code after} operation
32    * @throws NullPointerException if {@code after} is null
33    */
andThen(Consumer<? super T> after)34   default Consumer<T> andThen(Consumer<? super T> after) {
35     Objects.requireNonNull(after);
36     return (T t) -> {
37       accept(t);
38       after.accept(t);
39     };
40   }
41 }
42