Dos métodos para crear matrices genéricas

He aprendido siguiendo dos métodos para crear matrices genéricas.

Uno es

@SuppressWarnings("unchecked")
static <T> T[] array1(final Class<T> elementType, final int size) {

    return (T[]) Array.newInstance(elementType, size);
}

Y el otro es

static <T> T[] array2(final Class<T[]> arrayType, final int size) {

    return arrayType.cast(Array.newInstance(arrayType.getComponentType(), size));
}

¿Cual es mejor? ¿Son los mismos (internamente)? ¿Hay algún caso realmente malo?

Respuestas a la pregunta(3)

Su respuesta a la pregunta