En Scala, ¿cuál es la mejor manera de crear instancias dinámicas de un objeto e invocar un método mediante la reflexión?Scala: ¿Cómo puedo instanciar dinámicamente un objeto e invocar un método usando reflection?
me gustaría hacer Scala equivalente del siguiente código de Java:
Class class = Class.forName("Foo");
Object foo = class.newInstance();
Method method = class.getMethod("hello", null);
method.invoke(foo, null);
En el código anterior, tanto el nombre de la clase y el nombre del método se pasan en forma dinámica. El mecanismo de Java anterior probablemente podría usarse para Foo
y hello()
, pero los tipos de Scala no coinciden uno a uno con los de Java. Por ejemplo, una clase puede declararse implícitamente para un objeto singleton. También el método de Scala permite que todo tipo de símbolos sea su nombre. Ambos se resuelven por cambio de nombre. Ver Interop Between Java and Scala.
Otro problema parece ser la coincidencia de parámetros mediante la resolución de sobrecargas y el autoboxing, descrito en Reflection from Scala - Heaven and Hell.
Teniendo en cuenta que la función experimental en mi respuesta no hizo 2.8.0, sería mejor si otra respuesta fue marcado como aceptado. –
si tengo clase con parámetros para una clase como clase MailServerice (emailIds: cadena) ¿es posible invocar dinámicamente en tiempo de ejecución? – ashK