我想做点什么
def getMeASammy() {println "getMeASammy"}
def getMeADrink() {println "getMeADrink"}
def getMeASub() {println "getMeASub"}
Run Code Online (Sandbox Code Playgroud)
但是,我不想明确键入函数的名称.
当我研究一个新的库时,我有时会发现很难找到一个方法的实现.
在Java中,Metho#getDeclaringClass提供声明给定方法的类.因此,通过迭代Class#getMethods,我可以找到每个方法,声明它的类.
在Scala中,traits被转换为Java接口,并且扩展trait的类将通过将它们转发到静态定义这些方法的伴随类来实现trait的方法.这意味着,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
Run Code Online (Sandbox Code Playgroud)
解决这个问题的最佳方法是什么?意思是,给定一个类,我如何得到一个List [(Method,Class)],其中每个元组是一个方法,并且它被声明为trait/class?