Estaba mirando la pregunta: Crear una instancia de una clase a partir de su nombre de cadena, que describe cómo crear una instancia de una clase cuando tiene su nombre. ¿Hay alguna forma de hacerlo en Java? Tendré el nombre del paquete y el nombre de la clase y necesito poder crear un objeto con ese nombre en particular.
java
string
object
instantiation
ict1991
fuente
fuente
Respuestas:
Dos caminos:
Método 1: solo para clases que tienen un constructor sin argumentos
Si su clase tiene un constructor sin argumentos, puede obtener un
Class
objeto usandoClass.forName()
y usar elnewInstance()
método para crear una instancia (aunque tenga en cuenta que este método a menudo se considera malvado porque puede anular las excepciones marcadas de Java).Por ejemplo:
Método 2
Un enfoque alternativo más seguro que también funciona si la clase no tiene ningún constructor sin argumentos es consultar su objeto de clase para obtener su
Constructor
objeto y llamar a unnewInstance()
método en este objeto:Ambos métodos se conocen como reflexión . Por lo general, tendrá que detectar las diversas excepciones que pueden ocurrir, incluidas cosas como:
fuente
newInstance()
, ¿podríamos devolverlo a nuestro propio objeto?instance
acom.foo.MyClass
? dado que com.foo.MyClass es solo una cadenafuente
use Class.forName ("Nombre de cadena de clase"). newInstance ();
Esto hará que la clase denominada A se inicialice.
fuente
Para que sea más fácil obtener el nombre completo de una clase para crear una instancia usando
Class.forName(...)
, se podría usar elClass.getName()
método. Algo como:Luego, puede convertir el objeto que obtiene a cualquier clase a la que pase
makeObject(...)
:fuente
clazz.newInstance()
lugar delgetName
entoncesfromName
?Utilice la reflexión de Java
Crear nuevos objetos No hay equivalente a la invocación de métodos para constructores, porque invocar un constructor es equivalente a crear un nuevo objeto (para ser más precisos, crear un nuevo objeto implica tanto la asignación de memoria como la construcción del objeto). Entonces, el equivalente más cercano al ejemplo anterior es decir:
que encuentra un constructor que maneja los tipos de parámetros especificados y lo invoca, para crear una nueva instancia del objeto. El valor de este enfoque es que es puramente dinámico, con búsqueda e invocación del constructor en tiempo de ejecución, en lugar de en tiempo de compilación.
fuente
Class.forName ("ClassName") resolverá su propósito.
fuente
fuente
Algo como esto debería funcionar...
fuente
El uso
newInstance()
directo está en desuso a partir de Java 8. Debe usarClass.getDeclaredConstructor(...).newInstance(...)
con las excepciones correspondientes.fuente