Cómo crear un constructor en java con parámetros de clase?
Quiero tener una clase para ejecutar otras clases en Java, como un constructor parametrizado con una clase para ejecutar esa clase más tarde, similar a esto:
class MyClass{
Class classToRun;
public MyClass(Class c) {
super();
this.classToRun = c;
}
public void runClass(){
classToRun.someStaticMethod();
}
}
donde las posibles clases de classToRun
no tienen un ancestro común, pero todas tienen el método someStaticMethod
y no tienen idea de la existencia de MyClass
que las ejecuta.
Pero hay problemas, como que las clases internas no pueden tener métodos estáticos, las clases no se pueden convertir en Class
, etc.
Existen soluciones para el uso de métodos de clase parametrizados, como:
https://stackoverflow.com/questions/4872978/how-do-i-pass-a-class-as-a-parameter-in-java
https://stackoverflow.com/questions/14846853/passing-a-class-as-an-argument-to-a-method-in-java
pero no para los constructores.
¿Cuál es la solución correcta para hacer esto?
davy.ai
Una solución es utilizar la reflexión de Java para crear una instancia de la clase dinámicamente y luego llamar a su método estático.
Aquí tienes una implementación basada en el código de ejemplo proporcionado:
En esta implementación, utilizamos
Class.getDeclaredConstructor()
para obtener un constructor para la clase dada y luegonewInstance()
para crear una nueva instancia de la clase.Luego utilizamos
Class.getDeclaredMethod()
para obtener una referencia al método estático que queremos llamar, yMethod.invoke()
para ejecutar ese método en la instancia que acabamos de crear.Esta aproximación debería funcionar para cualquier clase con un método estático llamado
someStaticMethod
, independientemente de si tiene un ancestro común con otras clases que podrían pasarse comoclassToRun
.