que - Java cómo crear una instancia de una clase de una cadena
que es un atributo en java (3)
Compruebe la respuesta a esta pregunta: ¿Cuál es la diferencia entre "Class.forName ()" y "Class.forName (). NewInstance ()"? que explica en detalle cómo funciona todo esto.
Posible duplicado:
Crear una nueva clase a partir de una variable en Java
Tengo una cuerda
String className = "DummyClass"
Ahora quiero crear un objeto de clase donde el nombre de clase es className. Eso es algo así como
Object className = new className() // I know it''s not possible.
Quiero saber cómo hacer esto ...
Puedes usar la reflection
Por ejemplo,
Object o = Class.forName(className).newInstance();
Pero className
debe contener una ruta completa a la clase.
"Usar java.lang.reflect
" responderá a todas sus preguntas. Primero busque el objeto Class
usando Class.forName()
, y luego:
Si quiero crear una instancia de una clase que
forName()
conforName()
, primero tengo que pedirle un objetojava.lang.reflect.Constructor
que represente el constructor que quiero, y luego le pido a eseConstructor
que cree un nuevo objeto. El métodogetConstructor(Class[] parameterTypes)
inClass
recuperará unConstructor
; Entonces puedo usar eseConstructor
llamando a su métodonewInstance(Object[] parameters)
:
Class myClass = Class.forName("MyClass"); Class[] types = {Double.TYPE, this.getClass()}; Constructor constructor = myClass.getConstructor(types); Object[] parameters = {new Double(0), this}; Object instanceOfMyClass = constructor.newInstance(parameters);
Hay un nuevo newInstance()
en la Class
que podría hacer lo que quieras. No lo uses Convierte silenciosamente las excepciones comprobadas en excepciones sin marcar.
Tenga en cuenta que este método propaga cualquier excepción lanzada por el constructor nullary, incluida una excepción marcada. El uso de este método evita de manera efectiva la comprobación de excepciones en tiempo de compilación que, de otro modo, realizaría el compilador. El método
Constructor.newInstance
evita este problema al ajustar cualquier excepción lanzada por el constructor en una (comprobada)InvocationTargetException
.