【发布时间】:2010-12-22 11:16:34
【问题描述】:
当我研究一个新库时,我有时会发现很难找到一个方法的实现。
在 Java 中,Metho#getDeclaringClass 提供声明给定方法的类。因此,通过迭代 Class#getMethods,我可以为每个方法找到声明它的类。
在 Scala 中,特征被转换为 Java 接口,扩展特征的类将通过将特征的方法转发给静态定义这些方法的同伴类来实现特征的方法。这意味着 Method#getDeclaringClass 将返回类,而不是特征:
scala> trait A { def foo = {println("hi")}}
defined trait A
scala> class B extends A
defined class B
scala> classOf[B].getMethods.find(_.getName() == "foo").get.getDeclaringClass
res3: java.lang.Class[_] = class B
解决此问题的最佳方法是什么?意思是,给定一个类,我怎样才能得到一个 List[(Method, Class)] ,其中每个元组都是一个方法和它声明的特征/类?
【问题讨论】:
标签: reflection scala