【发布时间】:2010-11-30 23:53:14
【问题描述】:
在 Scala 中,动态实例化对象和使用反射调用方法的最佳方式是什么?
我想做以下 Java 代码的 Scala 等效项:
Class class = Class.forName("Foo");
Object foo = class.newInstance();
Method method = class.getMethod("hello", null);
method.invoke(foo, null);
在上面的代码中,类名和方法名都是动态传入的。上面的Java 机制可能可以用于Foo 和hello(),但是Scala 类型与Java 的类型不是一一对应的。例如,可以为单例对象隐式声明一个类。 Scala 方法也允许使用各种符号作为它的名称。两者都通过名称修饰来解决。见Interop Between Java and Scala。
另一个问题似乎是通过解决重载和自动装箱来匹配参数,在Reflection from Scala - Heaven and Hell 中进行了描述。
【问题讨论】:
-
鉴于我的答案中的实验性功能没有使 2.8.0,如果另一个答案被标记为接受会更好。
-
如果我的类带有类 MailServerice(emailIds : string) 之类的参数,是否可以在运行时动态调用?
标签: reflection scala name-mangling