如何获得Scala特征中所有方法的名称

Ani*_*mar 4 reflection scala traits

我需要我定义的scala特征中的所有方法名称。我知道这听起来像是一个小问题,但我找不到与特质有关的任何答案,它们全都围绕着课堂而展开。

具体来说,我需要所有抽象方法的名称。但是,如果我能获得所有方法的名称,而不论是否抽象,那也可以。

说我有这个特质

trait A {
  def myDefinedInt: Int = 2
  def myAbstractString: String
}
Run Code Online (Sandbox Code Playgroud)

我需要所有方法的列表(最好只是抽象方法)

我对scala比较陌生,因此尽管我获得了类和接口。特质对我来说是新的。

提前致谢!

Krz*_*sik 6

您可以使用所有方法,getDeclaredMethods然后仅过滤抽象方法:

 import java.lang.reflect.Modifier

 classOf[A]
    .getDeclaredMethods
    .filter(m =>  Modifier.isAbstract(m.getModifiers))
    .map(_.getName)
    .foreach(println)
Run Code Online (Sandbox Code Playgroud)

打印:myAbstractString

  • 可以通过将filter和map合并到collect中来简化:classOf [A] .getDeclaredMethods.collect {case m if Modifier.isAbstract(m.getModifiers)=> m.getName} .foreach(println) ` (4认同)