Me gustaría crear una instancia de una clase especificada utilizando su nombre. Mi código se muestra a continuación.Genéricos y Class.forName
Aparece una advertencia del compilador. ¿Estoy haciendo esto de la manera correcta? ¿Es posible utilizar 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 debe 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
Sí, esto es lo más cerca que puede llegar con Java. En cuanto a la creación del objeto real todavía hay algunos trucos que hacer, pero no voy a entrar en los detalles, ya que esos trucos se implementan en mi clase de utilidad que estoy planeando liberar tan pronto como encuentre el correcto canal para difundirlo entre todos los programadores de Java. – Esko
@Esko, considere el código de Google (para versiones publicadas) y/o con Github (para código real) –
Necesita agregar un molde para compilar 'final Class clazz = (Class ) Class.forName (className). asSubclass (ifaceClass); ' –