Genéricos y Class.forName

Me gustaría crear una instancia de una clase específica usando su nombre. Mi código se muestra a continuación.

Recibo una advertencia del compilador. ¿Estoy haciendo esto de la manera correcta? ¿Es posible incluso usar el nombre de una clase y recuperar una instancia de ese tipo, ya que no creo que haya ninguna forma de que el compilador sepa cuál debería ser el tipo?

public static <T> T create(final String className) {
    try {
        final Class<?> clazz = Class.forName(className);

        //WARNING: Type safety: Unchecked cast from capture#2-of ? to T
        return (T) create(clazz); 
    }
    catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}

public static <T> T create(final Class<T> classToCreate) {
    final Constructor<T> constructor;
    try {
        constructor = classToCreate.getDeclaredConstructor();
        final T result = constructor.newInstance();
        return result;
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

Gracias

Respuestas a la pregunta(6)

Su respuesta a la pregunta