In Scala, was ist die beste Möglichkeit, ein Objekt dynamisch zu instanziieren und eine Methode mit Reflektion aufzurufen?Scala: Wie kann ich ein Objekt dynamisch instanziieren und eine Methode mit Reflektion aufrufen?
Ich mag Scala-Äquivalent des folgenden Java-Code tun:
Class class = Class.forName("Foo");
Object foo = class.newInstance();
Method method = class.getMethod("hello", null);
method.invoke(foo, null);
In dem obigen Code, sowohl die Klassennamen und der Name der Methode werden in dynamisch übergeben. Der obige Java-Mechanismus könnte wahrscheinlich für Foo
und hello()
verwendet werden, 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 die Scala-Methode erlaubt den Namen aller möglichen Symbole. Beide werden durch Namensmangel gelöst. Siehe Interop Between Java and Scala.
Ein weiteres Problem scheint die Übereinstimmung der Parameter durch Auflösung von Überlastungen und Autoboxing zu sein, beschrieben in Reflection from Scala - Heaven and Hell.
Da die experimentelle Funktion in meiner Antwort nicht machen 2.8.0, wäre es besser, wenn eine andere Antwort als angenommen wurde markiert. –
Wenn ich Klasse mit Parametern für eine Klasse wie Klasse MailServerice (emailIds: string) haben ist es möglich, zur Laufzeit dynamisch aufzurufen? – ashK