9

作为 DSL 的一部分,我有很多代码一直在使用 Java 反射来调用 Java 对象上的任意用户指定方法。

但是,实际上,这些 Java 对象中有很多是 Scala 对象,并且它们上的一些方法用 Scala@deprecated注释进行了标记。不幸的是,Java 的注解机制不能看到 Scala 的注解,并且在 Scala 2.10 之前没有方便的方法(我知道吗?)来访问这些注解。

我终于升级到 2.10,并且希望能够从我的 DSL 发出弃用警告。但是,我不想重写整个评估器(至少现在)以使用 Scala 反射,所以有没有一种方便的方法可以从 ajava.lang.reflect.Method转到我可以使用 Scala 反射来确定 Scala 方法是否在问题已弃用?或者我是否必须使用 Scala 反射复制大量现有的方法解析逻辑才能获得该信息?

它看起来像一个JavaToScala曾经存在于 Scala 反射中的类,其中有一个methodToScala方法可以满足我的要求。我能找到的唯一痕迹是在这里,在一个谷歌代码项目中。为什么功能从核心反射中移出?或者它仍然以不同的名称存在?

编辑:看起来有问题的代码存在于 中scala.reflect.runtime.JavaMirrors,但不幸的是它是私有的(还有另一个JavaMirrors是公共 API 的一部分,但没有提供我需要的任何东西。)我无法弄清楚如果有一条通过公共 API 调用的“路径”将我一直带到methodAsScala隐藏在 private 中的 private JavaMirrors。至少可以这么说,这令人沮丧:(

4

1 回答 1

3

这是一个快速修复(感谢@EugeneBurmako)

https://gist.github.com/xeno-by/5277805

已为此提交了一个问题(感谢@MysteriousDan):

https://issues.scala-lang.org/browse/SI-7317

于 2013-05-02T23:01:19.463 回答