package speiger.src.collections.PACKAGE.functions; import java.util.Objects; import java.util.function.Consumer; /** * Type-Specific Consumer interface that reduces (un)boxing and allows to merge other consumer types into this interface */ @FunctionalInterface #if JDK_TYPE && !TYPE_BOOLEAN public interface CONSUMER extends Consumer, JAVA_CONSUMER #else public interface CONSUMER extends Consumer #endif { /** * Type-Specific function to reduce (un)boxing. * Performs this operation on the given argument. * * @param t the input argument */ void accept(KEY_TYPE t); /** * Type Specific sequencing method to reduce boxing/unboxing. * @param after a operation that should be performed afterwards * @return a sequenced consumer that does 2 operations * @throws NullPointerException if after is null */ public default CONSUMER andThen(CONSUMER after) { Objects.requireNonNull(after); return T -> {accept(T); after.accept(T);}; } /** {@inheritDoc} *

This default implementation delegates to the corresponding type-specific function. * @deprecated Please use the corresponding type-specific function instead. */ @Override @Deprecated default void accept(CLASS_TYPE t) { accept(OBJ_TO_KEY(t)); } /** {@inheritDoc} *

This default implementation delegates to the corresponding type-specific function. * @deprecated Please use the corresponding type-specific function instead. */ @Override @Deprecated default CONSUMER andThen(Consumer after) { Objects.requireNonNull(after); return T -> {accept(T); after.accept(KEY_TO_OBJ(T));}; } #if JDK_TYPE && PRIMITIVES /** {@inheritDoc} *

This default implementation delegates to the corresponding type-specific function. * @deprecated Please use the corresponding type-specific function instead. */ @Override @Deprecated default CONSUMER andThen(JAVA_CONSUMER after) { Objects.requireNonNull(after); return T -> {accept(T); after.accept(T);}; } #endif }