class Optional<T> {} interface TerminalOp<E_IN, R> {} abstract class AbstractPipeline<E_OUT>{ abstract void evaluate(); abstract <R> R evaluate(TerminalOp<E_OUT, R> terminalOp); public final Optional<E_OUT> findFirst() { return evaluate( makeRef(true)); } public static <T> TerminalOp<T, Optional<T>> makeRef(boolean mustFindFirst) { return null; } }