首页 文章

是否有适用于Scala的良好反射库?

提问于
浏览
13

我正在开发一个需要反射的库,并且需要特定于Scala的信息,而不是通过标准Java反射API提供的信息 . 现在我正在使用scalap中的未记录代码(Scala等同于javap)并尝试将它提供的数据与Java反射对象相关联,以便我可以调用方法等(scalap只是解析类文件) .

我找到了这个,但那里什么都没有...... https://github.com/dubochet/scala-reflection

...我已经搜索了Scala SVN repo的痕迹并且未能在那里找到它(但它可能是我错过了它) .

有没有人知道Scala反射库提供类似于scalap提供的信息,但也允许您调用Java反射库等方法,访问字段等?

[编辑]

我想应该更清楚地解释一下我要做什么......

我想编写一个库,它将获取一个文件,比如Excel文件中的分隔文本文件或工作表,顶部有 Headers ,还有一个Manifest,并返回一个Seq of objects . 所以基本上是一个看起来像这样的函数:

def parseFile[T](fileName: String)(implicit manifest: Manifest[T]): Seq[T] = {
  // lots of magic ...
}

在一般情况下,这可能是不可能的,而且我确信有很多“可能”的情况非常困难,但我认为有一个有用的子集可以在没有太多复杂性的情况下实现scalap(或scala.reflect,两者相似但又不同......)并将其与Java反射API中的正确对象结合 . 我的基本计划是查看文件的 Headers ,查看公共构造函数的参数名称和类型,并在随播对象上应用方法,选择与文件最匹配的方法,并将文件解析为对象 . 这适用于比应用程序构建更接近脚本的东西 . 所以我大多只是想要 Build 一些可以节省时间的东西 .

因此,我正在编写的库既没有它所创建的类的先验知识,也没有它所使用的文件的基本结构(分隔的表格文本,Excel等)之外的任何东西 . 优选地,它应该是微创的 .

我以前在Python中做过类似的事情,但它是侵入性的,因为我要么必须使用指定所需类型的描述符,要么我需要使描述符都接受字符串并转换为适当的类型 . 我认为Scala丰富的类型信息可以减少侵入性 .

1 回答

  • 14

    可以在运行时反射地创建清单 .

    输入TypeWrangler here on gitub ...

    只需删除该类的最后两个方法(特定于Spring),你就可以了!

    有一天,我将这个代码充实到一个完整的反射库,也使用了Scalap中的一些签名逻辑 . 似乎存在这样的需求 .

相关问题