code: public static <T, U> T[] copyOfRange(final U[] original, final int from, final int to, final Class<? extends T[]> newType) {
          final int newLength = to - from;
          final T[] copy = Object[].class.equals(newType) ? (T[]) new Object[newLength] : (T[]) N.newArray(newType.getComponentType(), newLength);
          copy(original, from, copy, 0, Math.min(original.length - from, newLength));
          return copy;
      }
docs: {@link Arrays#copyOfRange(Object[], int, int, Class)}
  
  @param original
  @param from
  @param to
  @param newType
  @return