加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

使用新的Scala反射API“动态”方法调用

发布时间:2020-12-16 09:34:52 所属栏目:安全 来源:网络整理
导读:在古老的时代, Invocation是实验实用程序,是标准库的一部分,可以动态地调用方法,如下所示: "Hello!" o 'substring(0,4) // to get Any back"Hello!" oo 'substring(0,4) // for an automatic unsafe cast to expected type 如何使用新的Scala反射API?
在古老的时代, Invocation是实验实用程序,是标准库的一部分,可以动态地调用方法,如下所示:

"Hello!" o 'substring(0,4)  // to get Any back
"Hello!" oo 'substring(0,4) // for an automatic unsafe cast to expected type

如何使用新的Scala反射API?

解决方法

Welcome to Scala version 2.10.0-20120617-072418-9a28ee1ffc (Java HotSpot(TM) 64-Bit Server VM,Java 1.6.0_33).
Type in expressions to have them evaluated.
Type :help for more information.

scala> class Foo { def bar(x: Int) = x }
defined class Foo

scala> val foo = new Foo
foo @ 5935b50c: Foo = Foo@5935b50c

scala> runtimeMirror(getClass.getClassLoader).reflect(foo)
res0 @ 65c24701: reflect.runtime.universe.InstanceMirror = scala.reflect.runtime.JavaMirrors$JavaMirror$JavaInstanceMirror@65c24701

scala> res0.symbol.typeSignature.member(newTermName("bar"))
res1 @ 69624a1c: reflect.runtime.universe.Symbol = method bar

scala> res0.reflectMethod(res1.asMethodSymbol)(42)
res2 @ 4ac1d188: Any = 42

有关API如何设计的一些背景信息可以在这里找到:Get companion object instance with new Scala reflection API。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读