blob: 25700290cbf4eaf5bc80083246705de0ffa30414 [file] [log] [blame]
enum StreamShape {
REFERENCE,
INT_VALUE,
LONG_VALUE,
DOUBLE_VALUE;
}
interface TerminalSink<T, R> extends Sink<T> {
R getAndClearState();
}
interface IntConsumer {
public void accept(int value);
}
interface Consumer<T> {
public void accept(T t);
}
class ForEachOp<T> {
protected ForEachOp(TerminalSink<T, Void> sink, StreamShape shape) {}
protected interface VoidTerminalSink<T> extends TerminalSink<T, Void> {
default public Void getAndClearState() {
return null;
}
public interface OfInt extends VoidTerminalSink<Integer>, Sink.OfInt{}
}
<error descr="Class 'Foo' must either be declared abstract or implement abstract method 'accept(int)' in 'OfInt'">class Foo implements VoidTerminalSink.OfInt</error> {}
public static <T> ForEachOp<T> make(final Consumer<? super T> consumer) {
return new ForEachOp<>((VoidTerminalSink<T>) consumer::accept, StreamShape.REFERENCE);
}
public static void make(final IntConsumer consumer) {
VoidTerminalSink.OfInt accept = consumer::accept;
}
}
interface Sink<T> extends Consumer<T> {
default void accept(int value) {}
interface OfInt extends Sink<Integer>, IntConsumer {
void accept(int value);
default void accept(Integer i) {}
}
}