"Using java.lang.reflect
" responderá a todas sus preguntas. En primer lugar buscar el objeto Class
usando Class.forName()
y, a continuación:
Si quiero crear una instancia de una clase que Recuperé con forName()
, tengo que preguntar primero por un objeto java.lang.reflect.Constructor
que representa el constructor que quiero, y luego pido que Constructor
para hacer un nuevo objeto. El método getConstructor(Class[] parameterTypes)
en Class
recuperará un Constructor
; entonces puedo usar esa Constructor
llamando a su método newInstance(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 método newInstance()
en Class
que podría parecer a hacer lo que quiera. No lo use. 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 un (marcado) InvocationTargetException
.
Desde java 1.5, [constructor.newInstance()] (http://download.oracle.com/javase/1,5,0/docs/api/java/lang/reflect/Constructor.html#newInstance (java.lang) .Object ...)) es varargs, entonces 'constructor.newInstance (nuevo Double (0), this); 'will do (en lugar de usar el engorroso' Object [] 'way). Lo mismo ocurre con 'Class.getConstructor()' (sin necesidad de feo Class []) – Bohemian
@Bohemian, nice. –
¿Qué pasa si la clase es estática? No necesitarías un constructor ¿no? – anon58192932