¿Hay alguna manera de crear una instancia de una clase particular dado el nombre de la clase (dinámica) y pasar parámetros a su constructor.
Algo como:
Object object = createInstance("mypackage.MyClass","MyAttributeValue");
Donde "MyAttributeValue"
es un argumento para el constructor de MyClass
.
java
reflection
instantiation
TheLameProgrammer
fuente
fuente
newInstance()
es un método varargs (igual queGetConstructor()
), no hay necesidad deObject
crear una matriz explícita .Object[]
discusión, prefiero crear la matriz explícitamente en este caso.Puede usar
Class.forName()
para obtener unClass
objeto de la clase deseada.Luego use
getConstructor()
para encontrar elConstructor
objeto deseado .Finalmente, llame
newInstance()
a ese objeto para obtener su nueva instancia.fuente
Puedes usar reflejos
fuente
Class.forName(className).getConstructor().newInstance();
;)Si la clase solo tiene un constructor vacío (como Actividad o Fragmento, etc., clases de Android):
fuente
Constructor<?> ctor = clazz.getConstructor(String.class)
no parece funcionar para micuando se usa (es decir),
getConstructor(String.lang)
el constructor debe ser declarado público. De lo contrario,NoSuchMethodException
se arroja un.si desea acceder a un constructor no público , debe usarlo en su lugar (es decir)
getDeclaredConstructor(String.lang)
.fuente
Desea utilizar java.lang.reflect.Constructor.newInstance (Object ...)
fuente
Manera muy simple de crear un objeto en Java usando
Class<?>
con argumento (s) de constructor pasando:Caso 1: - Aquí, hay un código pequeño en esta
Main
clase:Y, aquí está la
Base
estructura de clases:Caso 2: - Usted puede codificar de manera similar para constructor con argumento múltiple y constructor de copia. Por ejemplo, pasar 3 argumentos como parámetro al
Base
constructor necesitará que el constructor se cree en clase y un cambio de código arriba como:Y aquí la clase Base debería verse de alguna manera:
Nota: - No olvide manejar las diversas excepciones que deben manejarse en el código.
fuente
Si alguien está buscando una manera de crear una instancia de una clase a pesar de que la clase sigue el Patrón Singleton, aquí hay una manera de hacerlo.
Esto solo funciona para clases que implementan un patrón singleton usando un constructor privado.
fuente
También puede invocar métodos dentro del objeto creado.
Puede crear objetos instantáneamente invocando el primer limitador y luego invocar el primer método en el objeto creado.
fuente
String
como parámetro? Se vuelve un poco desordenado cuando cambia el orden del constructorgetConstructor(ClassName.class)
es mejor, supongo. Incluso si el orden de los constructores cambia en clase, no es necesario encontrar la posición manualmenteOtra respuesta útil. ¿Cómo uso getConstructor (params) .newInstance (args)?
En mi caso, el constructor de mi clase toma Webdriver como parámetro, por lo que se usa debajo del código:
fuente