code: @SuppressWarnings("unchecked")
    public static <T> T[] deepCopy(T[] array, Function<T, T> copyFunction) {
  
      Assert.notNull(array, "Array is required");
      Assert.notNull(copyFunction, "Copy Function is required");
  
      T[] arrayCopy = (T[]) Array.newInstance(array.getClass().getComponentType(), array.length);
  
      for (int index = 0, size = array.length; index < size; index++) {
        arrayCopy[index] = copyFunction.apply(array[index]);
      }
  
      return arrayCopy;
    }
docs: Deeply copies the given array into a new array of the same {@link Class type}.
  
  This function performs a deep copy by applying the provided {@link Function}
  used to copy each element from the original array.
  
  @param <T> {@link Class type} of the array elements.
  @param array array to copy.
  @param copyFunction {@link Function} used to copy, or clone an element from the original array.
  @return a deep copy of the given array.
  @throws IllegalArgumentException if the given array or {@link Function copy function} is {@literal null}.
  @see #deepCopy(Object[])
  @see #shallowCopy(Object[])