package speiger.src.collections.PACKAGE.utils; import java.util.Objects; import java.util.function.Consumer; import speiger.src.collections.utils.IArray; /** * Type-Specific Helper class to get the underlying array of array implementations. * @see speiger.src.collections.PACKAGE.lists.ARRAY_LIST * @Type(T) */ public interface IARRAY KEY_GENERIC_TYPE extends IArray { /** * Provides the Underlying Array in the Implementation * @return underlying Array * @throws ClassCastException if the return type does not match the underlying array. (Only for Object Implementations) */ public KEY_TYPE[] elements(); #if TYPE_OBJECT /** * Method to indicate if the function is save to use * @return true if the object is castable to the type that is requested */ public boolean isCastable(); #endif /** * Provides the Underlying Array in the Implementation. This function exists purely because of Synchronization wrappers to help run Synchronized Code * @param action the action that handles the array * @throws NullPointerException if action is null */ public default void elements(Consumer action) { #if TYPE_OBJECT if(!isCastable()) return; #endif Objects.requireNonNull(action); action.accept(elements()); } }