code: @SuppressWarnings("unchecked")
      public static <T> T[] subArray(T[] pArray, int pStart, int pLength) {
          return (T[]) subArray((Object) pArray, pStart, pLength);
      }
docs: Creates an array containing a subset of the original array.
  If the {@code pLength} parameter is negative, it will be ignored.
  If there are not {@code pLength} elements in the original array
  after {@code pStart}, the {@code pLength} parameter will be
  ignored.
  If the sub array is same length as the original, the original array will
  be returned.
  
  @param pArray  the original array
  @param pStart  the start index of the original array
  @param pLength the length of the new array
  @return a subset of the original array, or the original array itself,
  if {@code pStart} is 0 and {@code pLength} is either
  negative, or greater or equal to {@code pArray.length}.
  
  @throws IllegalArgumentException if {@code pArray} is {@code null}
  @throws ArrayIndexOutOfBoundsException if {@code pStart} < 0