Wie kann man in Scala am besten ein Objekt dynamisch instanziieren und eine Methode mit Reflection aufrufen?
Ich würde gerne das Scala-Äquivalent des folgenden Java-Codes erstellen:
Class class = Class.forName("Foo");
Object foo = class.newInstance();
Method method = class.getMethod("hello", null);
method.invoke(foo, null);
In dem obigen Code werden sowohl der Klassenname als auch der Methodenname dynamisch übergeben. Der obige Java-Mechanismus könnte wahrscheinlich auch für Foo
y hello()
, aber die Scala-Typen stimmen nicht eins zu eins mit denen von Java überein. Zum Beispiel kann eine Klasse implizit für ein Singleton-Objekt deklariert werden. Auch Scala-Methoden können alle Arten von Symbolen als Namen haben. Beides wird durch Name Mangling gelöst. Siehe Interop zwischen Java und Scala .
Ein weiteres Problem scheint der Abgleich von Parametern durch Auflösen von Überladungen und Autoboxing zu sein, beschrieben in Überlegungen aus Scala - Himmel und Hölle .
2 Stimmen
Da die experimentelle Funktion in meiner Antwort nicht in 2.8.0 aufgenommen wurde, wäre es besser, wenn eine andere Antwort als akzeptiert markiert würde.
0 Stimmen
Wenn ich eine Klasse mit Parametern für eine Klasse wie class MailServerice(emailIds : string) habe, ist es möglich, dynamisch zur Laufzeit aufzurufen?