通过反射列出Scala嵌套对象方法

通过反射列出Scala嵌套对象方法,scala,reflection,Scala,Reflection,我有以下Scala对象: object BusinessFacade { /** * Fachada para acesso aos métodos de controle de Usuário */ object Usuario { private lazy val usuarioBC = new UsuarioBC def buscar(id: Long)(implicit s: Session) = {

我有以下Scala对象:

object BusinessFacade {

    /**
    * Fachada para acesso aos métodos de controle de Usuário
    */
    object Usuario {
        private lazy val usuarioBC = new UsuarioBC

        def buscar(id: Long)(implicit s: Session) = {
            usuarioBC.findById(id)
        }       

        def inserir(usuario: User)(implicit s: Session) = {
            usuarioBC.insert(usuario)
        }

        def alterar(id: Long, usuario: User)(implicit s: Session) = {
            usuarioBC.update(id, usuario)
        }

        def remover(id: Long)(implicit s: Session) = {
            usuarioBC.delete(id)
        }

        def listar(numeroDaPagina: Int = 0, tamanhoDaPagina: Int = 10, filtro: String = "%")(implicit s: Session): Page[User] = {
            usuarioBC.list(numeroDaPagina, tamanhoDaPagina, filtro)
        }
    }

    /**
    * Fachada para acesso aos métodos de controle de Perfil
    */
    object Perfil {
        private lazy val perfilBC = new PerfilBC
    }

    /**
    * Fachada para acesso aos métodos de controle de Sistema
    */
    object Sistema {
        private lazy val sistemaBC = new SistemaBC 
    }
}
我想获得每个内部对象的每个已声明方法的名称,因此我尝试通过以下方式实现:

val facadeType = typeOf[BusinessFacade.type]

var permissoes = facadeType.members.filter(_.isModule).foreach { m => 
    println(m.name + " ========================")

    typeOf[m.type].decls.filter(_.isMethod).foreach(println)
}
通过这段代码,我得到了每个内部对象的名称,但没有得到任何声明的方法

有人能告诉我为什么,我怎样才能得到这些方法的名称

电流输出:

Sistema ========================
Perfil ========================
Usuario ========================
期望输出:

Sistema ========================
Perfil ========================
Usuario ========================
buscar
inserir
alterar
remover
listar

当您在
foreach
中使用
typeOf[m.type]
时,您得到的是
m
实例的类型,它的类型是
Symbol
,因此这不是您想要的。您可以使用
Symbol
上的
info
方法来获取要查找的
Type
实例:

typeOf[BusinessFacade.type].members.filter(_.isModule).foreach { m => 
    println(m.name + " ========================")
    m.info.decls.filter(_.isMethod).foreach(println)
}

或者
m.typeSignature
,我更容易记住。