scala – 测试是否定义了一种方法
发布时间:2020-12-16 19:06:26 所属栏目:安全 来源:网络整理
导读:我使用 scala反射来获取我的模型类中定义的特征的信息. 我可以很容易地得到这个类的成员这样做: ru.runtimeMirror(myClassLoader).staticClass("model.Model").typeSignature.members 但是如何知道这些成员是否被定义,即是否有实现? 解决方法 哇这是一个监
我使用
scala反射来获取我的模型类中定义的特征的信息.
我可以很容易地得到这个类的成员这样做: ru.runtimeMirror(myClassLoader).staticClass("model.Model").typeSignature.members 但是如何知道这些成员是否被定义,即是否有实现? 解决方法
哇这是一个监督!我提交了一个引用请求,目标是2.11.0(
https://github.com/scala/scala/pull/2612),它添加了Symbol.isAbstract.
由于这是一个新的API,由于兼容性限制,它不能使其成为2.10.x,所以同时请使用以下解决方法: 00:01 ~/Projects/210x (2.10.x)$scala Welcome to Scala version 2.10.3-20130527-133534-9b310bc906 (Java HotSpot(TM) 64-Bit Server VM,Java 1.6.0_45). Type in expressions to have them evaluated. Type :help for more information. scala> trait C { def foo: Int; def bar = 2 } defined trait C scala> val foo = typeOf[C].declarations.toList.apply(1) foo: reflect.runtime.universe.Symbol = method foo scala> val bar = typeOf[C].declarations.toList.apply(2) bar: reflect.runtime.universe.Symbol = method bar scala> def isDeferred(sym: Symbol) = sym .asInstanceOf[scala.reflect.internal.Symbols#Symbol] .hasFlag(scala.reflect.internal.Flags.DEFERRED) isDeferred: (sym: reflect.runtime.universe.Symbol)Boolean scala> isDeferred(foo) res2: Boolean = true scala> isDeferred(bar) res3: Boolean = false (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |