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.Constructorque represente el constructor que quiero, y luego le pido a eseConstructorque cree un nuevo objeto. El métodogetConstructor(Class[] parameterTypes)inClassrecuperará unConstructor; Entonces puedo usar eseConstructorllamando 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.newInstanceevita este problema al ajustar cualquier excepción lanzada por el constructor en una (comprobada)InvocationTargetException.