mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-19 01:50:56 +07:00
48 lines
1.3 KiB
Java
48 lines
1.3 KiB
Java
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) {}
|
|
}
|
|
} |