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



我有以下 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)
}

相关内容

  • 没有找到相关文章

最新更新