W Scala, jaki jest najlepszy sposób dynamicznego tworzenia obiektu i wywoływania metody za pomocą odbicia?Scala: Jak dynamicznie utworzyć instancję obiektu i wywołać metodę za pomocą odbicia?
Chciałbym zrobić Scala-odpowiednik następującego kodu Java:
Class class = Class.forName("Foo");
Object foo = class.newInstance();
Method method = class.getMethod("hello", null);
method.invoke(foo, null);
w powyższym kodzie, zarówno nazwa klasy i nazwa metody są przekazywane w dynamicznie. Powyższy mechanizm Java może być prawdopodobnie użyty dla Foo
i hello()
, ale typy Scali nie pasują jeden do jednego z Java. Na przykład klasa może być zadeklarowana niejawnie dla obiektu singleton. Również metoda Scala umożliwia nazwanie wszystkich rodzajów symboli. Oba są rozwiązywane przez mangling nazw. Zobacz Interop Between Java and Scala.
Inną kwestią wydaje się być dopasowanie parametrów przez rozwiązywanie przeciążeń i autoboxing, opisane w Reflection from Scala - Heaven and Hell.
Biorąc pod uwagę, że funkcja eksperymentalna w mojej odpowiedzi nie sprawiają 2.8.0, byłoby lepiej, gdyby inna odpowiedź została oznaczona jako zaakceptowana. –
jeśli mam klasę z parametrami dla klasy takiej jak klasa MailServerice (emailIds: string) czy możliwe jest wywoływanie dynamiczne w czasie wykonywania? – ashK