作为 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
。至少可以这么说,这令人沮丧:(