【发布时间】:2011-06-02 03:27:39
【问题描述】:
我正在开发一个需要反射的库,并且需要特定于 Scala 的信息,而不是通过标准 Java 反射 API 提供的信息。现在我正在使用 scalap 中未记录的代码(Scala 等效于 javap)并尝试将它提供的数据与 Java 反射对象相关联,以便我可以调用方法等(scalap 只解析类文件)。
我找到了这个,但那里什么都没有...... https://github.com/dubochet/scala-reflection
...我在 Scala SVN 存储库中搜索了它的踪迹,但也没有找到它(但我可能只是错过了它)。
有谁知道 Scala 反射库,它提供的信息类似于 scalap 提供的信息,但还允许您调用方法、访问字段等,如 Java 反射库?
[编辑]
我想应该更清楚地解释我想要做什么......
我想编写一个库,该库将获取一个文件,例如 Excel 文件中的分隔文本文件或工作表,顶部有标题,还有一个清单,并返回一个对象序列。所以基本上一个看起来像这样的函数:
def parseFile[T](fileName: String)(implicit manifest: Manifest[T]): Seq[T] = {
// lots of magic ...
}
在一般情况下,这可能是不可能的,而且我敢肯定有很多“可能”的情况非常困难,但我认为有一个有用的子集可以在没有太多复杂性的情况下实现一次我掌握了 scalap(或 scala.reflect,两者相似但不同......)的窍门,并将其与 Java 反射 API 中的正确对象结合起来。我的基本计划是查看文件的标题,查看公共构造函数的参数名称和类型,并在伴随对象上应用方法,选择最匹配文件的那个,然后将文件解析为对象。这是为了更接近脚本而不是应用程序构建。所以我主要只是想构建一些可以节省我时间的东西。
所以我正在编写的库既没有关于它正在创建的类的先验知识,也没有关于它所使用文件的基本结构(分隔的表格文本、Excel 等)之外的任何内容。最好是微创的。
我以前在 Python 中做过类似的事情,但它是侵入性的,因为我要么必须使用指定所需类型的描述符,要么需要使描述符都接受字符串并转换为适当的类型。我认为使用 Scala 丰富的类型信息可以减少侵入性。
【问题讨论】:
-
您可能会发现发布在我的问题上的答案很有帮助:stackoverflow.com/questions/1469958/…
-
我没有看到你的问题,但不幸的是,除了将它添加到我的参考列表之外,它并没有帮助。
-
您是否将结构类型视为反射的手段?
-
@pedrofurla - 请参阅关于我正在尝试做的添加的注释。
标签: reflection scala