Tue, 21 May 2013 13:50:56 +0100
8005207: test has 2 @bug tags
Reviewed-by: mcimadamore
aoqi@0 | 1 | /** |
aoqi@0 | 2 | * Performs operations upon an input object which may modify that object and/or |
aoqi@0 | 3 | * external state (other objects). |
aoqi@0 | 4 | * |
aoqi@0 | 5 | * <p>All block implementations are expected to: |
aoqi@0 | 6 | * <ul> |
aoqi@0 | 7 | * <li>When used for aggregate operations upon many elements blocks |
aoqi@0 | 8 | * should not assume that the {@code apply} operation will be called upon |
aoqi@0 | 9 | * elements in any specific order.</li> |
aoqi@0 | 10 | * </ul> |
aoqi@0 | 11 | * |
aoqi@0 | 12 | * @param <T> The type of input objects to {@code apply}. |
aoqi@0 | 13 | */ |
aoqi@0 | 14 | public interface TBlock<T> { |
aoqi@0 | 15 | |
aoqi@0 | 16 | /** |
aoqi@0 | 17 | * Performs operations upon the provided object which may modify that object |
aoqi@0 | 18 | * and/or external state. |
aoqi@0 | 19 | * |
aoqi@0 | 20 | * @param t an input object |
aoqi@0 | 21 | */ |
aoqi@0 | 22 | void apply(T t); |
aoqi@0 | 23 | |
aoqi@0 | 24 | /** |
aoqi@0 | 25 | * Returns a Block which performs in sequence the {@code apply} methods of |
aoqi@0 | 26 | * multiple Blocks. This Block's {@code apply} method is performed followed |
aoqi@0 | 27 | * by the {@code apply} method of the specified Block operation. |
aoqi@0 | 28 | * |
aoqi@0 | 29 | * @param other an additional Block which will be chained after this Block |
aoqi@0 | 30 | * @return a Block which performs in sequence the {@code apply} method of |
aoqi@0 | 31 | * this Block and the {@code apply} method of the specified Block operation |
aoqi@0 | 32 | */ |
aoqi@0 | 33 | public default TBlock<T> chain(TBlock<? super T> other) { |
aoqi@0 | 34 | return (T t) -> { apply(t); other.apply(t); }; |
aoqi@0 | 35 | } |
aoqi@0 | 36 | } |