En Scala, quelle est la meilleure façon d'instancier dynamiquement un objet et appeler une méthode à l'aide de la réflexion?
Je voudrais faire Scala-équivalent du code Java suivant:
Class class = Class.forName("Foo");
Object foo = class.newInstance();
Method method = class.getMethod("hello", null);
method.invoke(foo, null);
Dans le code ci-dessus, à la fois le nom de la classe et le nom de la méthode sont transmises de façon dynamique. La au-dessus de Java mécanisme pourrait sans doute être utilisé pour Foo
et hello()
, mais la Scala types ne correspondent pas à un-à-un avec celle de Java. Par exemple, une classe peut être déclarée implicitement pour un objet singleton. Aussi Scala méthode permet toutes sortes de symboles à son nom. Les deux sont résolus par le nom d'amputation. Voir l'Interopérabilité Entre Java et Scala.
Un autre problème semble être la mise en correspondance des paramètres par la résolution de surcharges et de l'autoboxing, décrit dans la Réflexion de Scala - Ciel et de l'Enfer.