import java.lang.reflect.Array;
import java.lang.*;

class Ideone {
    static <T> T[] getGenericArray(T... a) {
        return a;
    }

    static <T> void genericArrayFailure(T... a) {
        Object[] objectArray = a;
        objectArray[0] = 1;
        T t = a[0];
    }
    
    static <T> T[] getGenericArrayReflexionAPI(T a, T b, T c) {
        T[] array = (T[]) Array.newInstance(a.getClass(), 3);
        array[0] = a;
        array[1] = b;
        array[2] = c;
        return array;
    }

    public static void main (String[] args) throws java.lang.Exception
    {
        String[] stringArray = getGenericArray("1", "2", "3");
        // class [Ljava.lang.String;
        System.out.println(stringArray.getClass());

        stringArray = getGenericArrayReflexionAPI("1", "2", "3");
        // class [Ljava.lang.String;
        System.out.println(stringArray.getClass());

		// Exception in thread "main" java.lang.ArrayStoreException: java.lang.Integer
        genericArrayFailure("1", "2", "3");
    }
}